Проблема в том, что вы смешиваете стандартный строковый класс библиотеки шаблонов с VCL строковым классом . Свойство caption ожидает строку VCL, которая обладает всеми функциями STL.
Работающий пример действительно передает (const char*
), что хорошо, потому что для этого есть конструктор в конструкторе класса VCL UnicodeString
, однако нет конструктора для копирования из строк STL.
Вы можете сделать одну из двух вещей, вы можете использовать один из строковых классов VCL в вашем векторе вместо STL, так что:
std::vector <std::string> myStringVec(20, "");
myStringVec.at(0) = "SomeText";
std::string s = "something";
становится:
std::vector <String> myStringVec(20, "");
myStringVec.at(0) = "SomeText";
String s = "something";
В этом случае две нижние строки также будут работать. В качестве альтернативы вы можете извлечь фактический нулевой завершенный символьный указатель из строк STL и передать их заголовку, после чего он будет преобразован в класс VCL String следующим образом:
// both lines will now work
Form2->lblTxtPytanie1->Caption = myStringVec.at(0).c_str();
Form2->lblTxtPytanie1->Caption = s.c_str();
Какое решение вы предпочитаете, зависит от вас, но если у вас нет особой необходимости в классе строк STL, я настоятельно рекомендую вам использовать классы строк VCL (как я показал в моем первом примере). Таким образом, вам не нужно иметь два разных строковых класса.