Fehlermeldung bei Compilierung
-
Hallo,
erhalte folgenden Fehler bei Compilierung des folgenden Quelltextes:[C++ Fehler] Sprachauswahl.cpp(14): E2451 Undefiniertes Symbol 'String'
[C++ Fehler] Sprachauswahl.cpp(71): E2268 Aufruf der undefinierten Funktion 'searchLang'void split(String& text, String& separators, vector<String>& words) { int n = text.length(); int start, stop; start = text.find_first_not_of(separators); while ((start >= 0) && (start < n)) { stop = text.find_first_of(separators, start); if ((stop < 0) || (stop > n)) stop = n; words.push_back(text.substr(start, stop - start)); start = text.find_first_not_of(separators, stop+1); } } //----------------------------------------------------------------------------- void searchLang(String *returnXMLNode,String *returnLangNode) { try { _di_IXMLDocument XML = LoadXMLDocument("language.xml"); _di_IXMLNodeList NodeList = XML->DocumentElement->ChildNodes; _di_IXMLNode TestNode = NodeList->Nodes[0]; int count = TestNode->ChildNodes->Count; for (int j=0; j<count; j++) { returnXMLNode[j]= (String)TestNode->ChildNodes->Nodes[j]->NodeName; returnLangNode[j]= (String)TestNode->ChildNodes->Nodes[j]->NodeValue; } } catch (...) { try { throw Exception("Language-file not found!"); } catch (Exception &exception) { Application->ShowException(&exception); } } } TForm2 *Form2; //--------------------------------------------------------------------------- __fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) { CB_Lang->Clear(); int LangValueLength; String LangShortValue[40]; String LangLongValue[40]; searchLang(LangShortValue, LangLongValue); LangValueLength = LangLongValue->Length(); for (int i = 0; i < LangValueLength ; i++ ) { CB_Lang->Items->Add(LangShortValue[i]+ " " + LangLongValue[i]); } } //--------------------------------------------------------------------------- void __fastcall TForm2::CB_LangSelect(TObject *Sender) { String Language; Language = CB_Lang->Text; // Hier folgt aufruf der Methode Split mit übergabe von dem String Language und Seperator }Kann mir da jemand weiterhelfen? Habe bestimmt in der Eile etwas übersehen.
-
Die Fehlermeldung bezieht sich auf Zeile 1 des Quelltextes!
-
Hallo
Ja hast du, und zwar anzugeben
- an wlechen Stellen genau die Meldung angezeigt werden.
- Die Aufteilung des Codes auf die DateienDeshalb kann ich nur raten
Undefiniertes Symbol 'String'
bedeutet das du wohl bei der Datei mit der Deklaration der split-Funktion den Include #include <VCL.h> vergessen
Aufruf der undefinierten Funktion 'searchLang'
Du hast in der Form-Datei den Include auf die Datei mit der Deklaration mit der split-Funktion vergessen.
bis bald
akari
-
Habe den Fehler schon gefunden. War etwas Anderes.
Trotzdem danke.
-
Da 'find_first_not_of' ist kein Element von 'AnsiString' ist, suche ich nun eine möglichkeit meine AnsiStringvariable so zu konvertieren, dass ich mit 'find_first_not_of' arbeiten kann. Wie geht das am besten?
-
Hausmarke schrieb:
Da 'find_first_not_of' ist kein Element von 'AnsiString' ist, suche ich nun eine möglichkeit meine AnsiStringvariable so zu konvertieren, dass ich mit 'find_first_not_of' arbeiten kann. Wie geht das am besten?
AnsiString to std::string --> Google, FAQ, Borland Hilfe...
-
Hallo
find_first_not_of ist eine Methode von std::string, nicht von AnsiString.
Da du das nicht weißt nehm ich an du hast die Funktion split irgendwo herauskopiert und den String-Typ durch AnsiString ersetzt. Das geht so nicht, du must zumindestens intern mit std::string arbeiten.#include <string> ... void split(const String& text, const String& separators, vector<String>& words) { std::string buffer = text.c_str(); // Umwandlugn auf den richtigen Datentyp int n = buffer.length(); int start, stop; start = buffer.find_first_not_of(separators.c_str()); while ((start >= 0) && (start < n)) { stop = buffer.find_first_of(separators.c_str(), start); if ((stop < 0) || (stop > n)) stop = n; words.push_back(AnsiString(buffer.substr(start, stop - start).c_str())); start = buffer.find_first_not_of(separators.c_str(), stop+1); } }bis bald
akari
-
Sorry,
aber danke.
Habe mir das als Vorlage genommen gehabt. Habe nicht soviel mit den Methoden von st::string gearbeitet. Danke dir.
-
Warum machst du die Parameter der Funktion nicht auch gleich zu std::string? Dann brauchst du nicht mehr zu konvertieren (in der Funktion).
-
Hallo
ich vermute das damit auch die Texte von VCL-Controls (und damit AnsiStrings) übersetzt werden soll, und dann wäre eine interne Konvertierung sinnvoller.
Wenn dem nicht so sein sollte, ist natürlich eine native Unrterstützung von std::string als Paramter besser. Sprich die Funktion im Originalzustand belassen.bis bald
akari