Auf Funktionen einer anderen Form zugreifen
-
Dazu gibt es auch was in den FAQ.
-
danke schonmal für die antworten.
leider ist mein problem immer noch nicht gelöst, ich erhalte immer noch den fehler E2293, ) erwartet.
ich habe gelesen, dass es ein borland problem sei, da andere compiler den an sich korrekten code richtig kompilieren.
ausserdem habe die änderung von #include <string> zu #include <string.h> schon geholfen, was bei mir aber nicht der fall war.ich poste euch mal noch den teil meiner Unit1.h, welche nicht von der IDE verwaltet wird. der fehler sollte ja 1. in der header datei liegen und 2. hoffentlich von mir stammen, und an __published: habe ich nichts geändert.
private: // User declarations TEdit *var_edit[100]; TLabel *var_label[100]; void __fastcall ed_var_dmChange(TObject *Sender); void __fastcall ed_var_domChange(TObject *Sender); void __fastcall ed_var_kothChange(TObject *Sender); void __fastcall ed_var_sabChange(TObject *Sender); void __fastcall ed_var_sdChange(TObject *Sender); void __fastcall ed_var_warChange(TObject *Sender); public: // User declarations void uebergabe(string str1); __fastcall TForm1(TComponent* Owner); };
-
include <string> ist die richtige Variante.
Verwendest du den entsprechenden Namespace? Sonst musst du std::string schreiben. Allerdings passt die Fehlermeldung nicht dazu...
Welche Zeile wird dir denn als fehlerhaft markiert?
-
Hallo
ich habe gelesen, dass es ein borland problem sei, da andere compiler den an sich korrekten code richtig kompilieren.
Auch der Borland Compiler kompiliert korrekten Code, dein Code ist also nicht an sich korrekt.
Und außer dem schon genannten fehlenden Namespace sehe ich in deinem Quellcode auch keine Fehlerquelle.bis bald
akari
-
wieso muss man überhaupt #include <string> einfügen??? Im Builder sind Strings doch sowieso vorhanden ...
Übrigends werden Strings Großgeschrieben deklariert!
String deintext;
anstatt
string deintext;
-
string ist der Typ aus dem Standard.
String ist der Typ aus der VCL. Das ist ein himmelweiter Unterschied.
-
Hallo
... und wenn du string[i] (der im Namespace [i]std lieg) verwenden willst, must du auch include <string> verwenden.
Richtig ist, das es in einfachen VCL-Projekten normalerweise kein Grund gibt, string zu verwenden, denn die VCL verwendet durchgehend String.bis bald
akari
-
danke vielmals
String statt string wars tatsächlich, bzw. mit std::string gehts auch. mir wurde beigebracht, dass ich das, was ich zusätzlich brauche, in der cpp datei mit #include hinzufügen soll. dort habe ich auch ein "using namespace std", daher versteh ich nicht, warum ich das std vorher schreiben muss? ich habe das allerdings auch so gelernt, dass man string kleinschreiben darf. und warum funktioniert zb.
string s = "Teststring";
tadellos? (wenn #include <string>)
ich habe das kurz ausprobiert, mit einem edit, einen label und einem button:
void __fastcall TForm1::Button1Click(TObject *Sender) { String s = Edit1->Text.c_str(); Label1->Caption = s.c_str(); }
das funktioniert ohne "#include <string>".
void __fastcall TForm1::Button1Click(TObject *Sender) { std::string s = Edit1->Text.c_str(); Label1->Caption = s.c_str(); }
hier ist aber "#include <string>" erforderlich.
brauche da offensichtlich noch nachhilfe!
danke euch schonmal sehr
-
Hallo
Es wurde doch schon alles gesagt. String kommt direkt aus der VCL des Builders und ist immer verfügbar, solange include <vcl.h> vorher deklariert ist.
string ist ein Datentyp aus dem C++ Standard und zwar auch im Builder vorhanden, aber include <string> muß vorher manuell deklariert werden. Dann kann man mit using namespace std; noch vermeiden, jedesmal den Namespace std noch anfügen zu müßen. Warum du dann aber trotzdem noch einen Fehler bekommst, ist für uns hier nicht einsehbar.bis bald
akari
-
Nachtrag zu akaris Post:
Wenn du String verwendest, kannst du dir auch getrost das c_str() ersparen:
void __fastcall TForm1::Button1Click(TObject *Sender) { String s = Edit1->Text; Label1->Caption = s; }
Ich würde empfehlen, innerhalb der VCL ausschließlich String zu verwenden.
-
auf die gefahr hin, dass es eine sehr doofe frage ist:
ob ich String oder std::string verwende kommt am ende auf das selbe hinaus?
also kann ich für einfache dinge String verwenden, aber sobald ich jetzt "erweiterte funktionen" wie zb. find() gebrauche, muss ich mit std::string arbeiten?
ist das der unterschied?danke für die erklärungen!
-
Hallo
Du kannst für alles String verwenden. Als Ersatz für string::find gibts es String::Pos.
bis bald
akari
-
gut, ich glaube, ich steig da langsam durch!
habt dank