String-Rückgabe aus anderer Klasse funktioniert nicht
-
Moin!
Ich habe ein kleines Problem. Ich kann mir nicht vorstellen, dass es viel Aufwand ist, aber ich komm einfach nicht dahinter. Ich habe meine "Form1"-Klasse und eine Klasse Namens "Ort". Ich gebe aus der Klasse Form1 eine Plz in die Funktion selektiere() von Ort. Hier wird die PLZ gefiltert und sofern ein Treffer erfolgt, dort der entsprechende Ortsname in einen String geschrieben.
Nun habe ich in der Klasse Ort noch eine Funktion vom Typ string, welche den String logischerweise ja zurückgeben soll.Das ganze sieht so aus:
private: System::Void tbPlz_TextChanged(System::Object^ sender, System::EventArgs^ e) { einOrt = new Ort(); einOrt->selektiere(Convert::ToInt32(tbPlz->Text)); if(einOrt->returnOrt()=="") { this->tbOrtsname->BackColor = Color::Red; } else { this->tbOrtsname->Text = einOrt->returnOrt(); //********************************* } }
void Ort::selektiere(int iPlzUebergeben) { iPlz = iPlzUebergeben; switch(iPlz) { case 12345: sOrt = "Ortsname"; break; } } string Ort::returnOrt() { return sOrt; }
Ich habe die betreffende Zeile mit nen Haufen sternen als Kommentar markiert. Ich will im Grunde nur den zurückgegebenen Ortsnamen aus der "Ort.cpp" in meine Textbox in Form1 schreiben. Ich habe schon folgende Varianten probiert:
this->tbOrtsname->Text = einOrt->returnOrt(); this->tbOrtsname->Text = Convert::ToString(einOrt->returnOrt()); this->tbOrtsname->Text = std::string(einOrt->returnOrt());
Er sagt mir aber jedes mal solche Sachen wie
- "error C2664: 'void System::Windows::Forms::Control::Text::set(System::String ^)': Konvertierung des Parameters 1 von 'std::string' in 'System::String ^' nicht möglich"
oder
- "error C2665: "System::Convert::ToString": Durch keine der 37 Überladungen konnten alle Argumenttypen konvertiert werden."Könnte mir da jemand helfen? Ich mache das nur aus Spaß weil ich ein wenig für die Schule lernen sollte, deswegen bin ich da nich so fitt drin. Kann mir auch nicht vorstellen, dass es so ein Riesenproblem wäre.
Habe natürlich die <string> und <iostream> includet und "using namespace std;" auch verwendet.
Gruß
-
Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ (auch C++0x und C++11) in das Forum C++/CLI mit .NET verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Mische bitte nie C++/CLI und C++, das macht keinen Sinn!
Warum verwendest Du überhaupt C++/CLI? Nimm bitte C#:
http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/ANsonsten siehe FAQ...
http://www.c-plusplus.net/forum/158666
-
Jochen Kalmbach schrieb:
Warum verwendest Du überhaupt C++/CLI? Nimm bitte C#[...]
Naja, in der Schule arbeiten wir halt mit C++
Jochen Kalmbach schrieb:
ANsonsten siehe FAQ...
http://www.c-plusplus.net/forum/158666Muss ich den Konstruktor in der separaten Ort.h aufrufen, wo ich den String deklariere oder in der Form1, wo ich die Rückgabe des Strings erwarte?
Ich habs jetzt mal in beiden probiert, kriege aber nach wie vor die selben Fehlermeldungen, dass es nicht konvertiert werden kann.Gruß
-
Habe es nun nach ein wenig rumtüfteln gelöst
Sieht jetzt halt so aus:
private: System::Void tbPlz_TextChanged(System::Object^ sender, System::EventArgs^ e) { if(tbPlz->TextLength == 5) { einOrt = new Ort(); einOrt->selektiere(Convert::ToInt32(tbPlz->Text)); if(einOrt->returnOrt()=="") { this->tbOrtsname->BackColor = Color::DarkSalmon; this->tbPlz->BackColor = Color::DarkSalmon; } else { this->tbPlz->BackColor = Color::LightGreen; this->tbOrtsname->BackColor = Color::LightGreen; const char* cOrt; cOrt = einOrt->returnOrt(); String ^strOrt = gcnew String(cOrt); this->tbOrtsname->Text = strOrt; } } else { this->tbOrtsname->BackColor = Color::DarkSalmon; this->tbPlz->BackColor = Color::DarkSalmon; } }
const char* Ort::returnOrt() { return cOrt; }
Habe im Grunde den Rückgabe-Typ der Funktionen geändert und diesen Rückgabewert dann zu einem String konvertiert.
Was mich aber jetzt trotzdem interessiert, was ich aus deinem Blog nicht verstanden habe. Wo liegt jetzt der genaue Unterschied zwischen C++ und C++/CLI? Ich hab zwar deinen Eintrag durchgelesen, aber entweder ist er mir zu kompliziert geschrieben oder besitze ich einfach nicht das nötige Fachjargon. Das mit C# und dem Visual Studio 2008/2010 ergibt sich mir schon, allerdings halte ich es schon vorerst für besser es beizubehalten, wenn wir in der Schule damit arbeiten.
-
...
-
Swordfish schrieb:
xkeks93x schrieb:
[...] eine Funktion vom Typ string, [...]
xkeks93x schrieb:
Habe im Grunde die String-Funktionen, zu char Funktionen gemacht und diese dann einfach in der Form1 zu nem String konvertiert.
Heinrich! Mir graut's vor dir.
War ein wenig unglücklich formuliert^^ Meinte eher eine Funktion mit dem Rückgabe-Typ String. Wenns denn so richtig ist...
Oder was meinste sonst?