schnixx Geschrieben 20. Dezember 2011 Geschrieben 20. Dezember 2011 (bearbeitet) private: System::Void button1_Click_1(System::Object * sender, System::EventArgs * e) { //System::IO::StreamReader *in; string line; string input; ifstream in; std::map<string,int> StrMap; this->label2->Text="Option 1: Select one file"; //OpenFileDialog1->ShowDialog(); if(OpenFileDialog1->ShowDialog() == DialogResult::OK) { //in = new System::IO::StreamReader(OpenFileDialog1->FileName); std::string input = OpenFileDialog1.FileName.ToString(); std::ifstream in(input.c_str(), ios::in); //std::ifstream in((OpenFileDialog1->OpenFile()), ios::in); //MessageBox::Show(sr->ReadToEnd()); //textBox1->Text = openFileDialog1->FileName; //textBox1->Text = in->ReadToEnd(); // in->Close(); } Hat jmd. eine Idee wo der Fehler liegt? Fehlermeldung: error C2228: left of '.FileName' must have class/struct/union type type is 'System::Windows::Forms::OpenFileDialog __gc *' did you intend to use '->' instead? Bearbeitet 20. Dezember 2011 von Klotzkopp Zitieren
schnixx Geschrieben 20. Dezember 2011 Autor Geschrieben 20. Dezember 2011 Code Tags vergessen! Sorry. Zitieren
Klotzkopp Geschrieben 20. Dezember 2011 Geschrieben 20. Dezember 2011 (bearbeitet) OpenFileDialog1->FileName Ich habe deinen Thread ins .NET-Forum verschoben, weil das kein C++ ist, sondern C++/CLI. Das ist trotz des ähnlichen Namens eine andere Sprache. Und ein ernst gemeinter Rat: Wenn du GUI mit Windows Forms machen willst, nimm besser C#. Siehe auch: Jochen Kalmbach Code Tags vergessen! Sorry.Statt dich zu entschuldigen, kannst du sie auch einfach noch einfügen. Du kannst deine Beiträge 15 Minuten lang editieren. Bearbeitet 20. Dezember 2011 von Klotzkopp Zitieren
schnixx Geschrieben 20. Dezember 2011 Autor Geschrieben 20. Dezember 2011 okay. inwieweit könnt ihr mich nun bei der fehlerbehebung unterstützen? habt ihr ideen wieso der fehler auftritt? Zitieren
Klotzkopp Geschrieben 20. Dezember 2011 Geschrieben 20. Dezember 2011 Hab ich doch geschrieben :confused: Zitieren
schnixx Geschrieben 20. Dezember 2011 Autor Geschrieben 20. Dezember 2011 Okay allerdings taucht eine erneute Fehlermeldung auf, wenn ich die Zeile wie oben beschrieben verändere. Fehlermeldung: c:\Program Files\Microsoft Visual Studio .NET 2003\Visual Studio Projects\wfa_test\Form1.h(279) : error C2440: 'initializing' : cannot convert from 'System::String __gc *' to 'std::basic_string<_Elem,_Traits,_Ax>' with [ _Elem=char, _Traits=std::char_traits<char>, _Ax=std::allocator<char> ] No constructor could take the source type, or constructor overload resolution was ambiguous Zitieren
Klotzkopp Geschrieben 20. Dezember 2011 Geschrieben 20. Dezember 2011 (bearbeitet) http://support.microsoft.com/kb/311259 Du mischst die Klassen der C++-Standardbibliothek mit den .NET-Klassen. Die können nicht miteinander. Mach dir klar, was der Unterschied zwischen System::String und std::string ist. Nochmal mein Rat: Benutz C#, oder benutz zumindest konsequent die .NET-Klassen. Mit diesem Mischmasch begibst du dich auf einen sehr steinigen Pfad. Bearbeitet 20. Dezember 2011 von Klotzkopp Zitieren
schnixx Geschrieben 21. Dezember 2011 Autor Geschrieben 21. Dezember 2011 irgendwie funktioniert das nicht... wie hieße denn die syntax korrekterweise?verzweifel schon wieder...:/ Zitieren
Klotzkopp Geschrieben 21. Dezember 2011 Geschrieben 21. Dezember 2011 irgendwie funktioniert das nicht...Das ist keine ausreichende Fehlerbeschreibung. Zeig deinen Code und die Fehlermeldung. wie hieße denn die syntax korrekterweise?So, wie sie auf der verlinkten Seite steht. verzweifel schon wieder...:/Wer nicht hören will... Ich schreibe hier mehrfach, dass dein Ansatz, Standard-C++ mit C++.NET und Windows Forms zu mischen, keine gute Idee ist. Du merkst anscheinend selbst, dass das nicht einfach ist. Trotzdem machst du offenbar unbeirrbar damit weiter. Da bleibt mir nur, dir zu wünschen, dass du mit deinen selbstauferlegten Schwierigkeiten glücklich wirst. Zitieren
schnixx Geschrieben 21. Dezember 2011 Autor Geschrieben 21. Dezember 2011 Das problem ist, dass ich es nicht beeinflussen kann. Mir wurde WFA vom Lehrpersonal vorgegeben. private: System::Void button1_Click_1(System::Object * sender, System::EventArgs * e) { //System::IO::StreamReader *in; string line; string input; ifstream in; std::map<string,int> StrMap; this->label2->Text="Option 1: Select one file"; //OpenFileDialog1->ShowDialog(); if(OpenFileDialog1->ShowDialog() == DialogResult::OK) { System::String * input = OpenFileDialog1->FileName; const __wchar_t __pin * FileName = PtrToStringChars(input); //in = new System::IO::StreamReader(OpenFileDialog1->FileName); //System::String *input = OpenFileDialog1->FileName; std::ifstream in(input); //std::ifstream in((OpenFileDialog1->OpenFile()), ios::in); //textBox1->Text = in->ReadToEnd(); // in->Close(); } Fehlermeldung: c:\Program Files\Microsoft Visual Studio .NET 2003\Visual Studio Projects\wfa_test\Form1.h(294) : error C2664: 'std::basic_ifstream<_Elem,_Traits>::basic_ifstream(const char *,std::_Iosb<_Dummy>::openmode,int)' : cannot convert parameter 1 from 'System::String __gc *' to 'const char *' with [ _Elem=char, _Traits=std::char_traits<char>, _Dummy=int ] Cannot convert a managed type to an unmanaged type Zitieren
Klotzkopp Geschrieben 21. Dezember 2011 Geschrieben 21. Dezember 2011 Das problem ist, dass ich es nicht beeinflussen kann. Mir wurde WFA vom Lehrpersonal vorgegeben.Wurde dir auch C++.NET vorgegeben? Falls nicht, benutz C#. Falls doch: Wurde dir vorgegeben, dass du C++.NET mit Standard-C++ mischen sollst? Falls nicht, benutzt die .NET-Klassen, nicht std::map, std::string und std::ifstream. Falls doch: Dann sehen wir weiter. Zitieren
schnixx Geschrieben 21. Dezember 2011 Autor Geschrieben 21. Dezember 2011 Mir wurde nicht direkt vorgegeben das ich das mischen soll, habe allerdings nur Visual .NEt zur Verfügung gestellt bekommen. Ich habe den Sourcecode für das Tool bereits fertig, nun aber nur noch diese Woche um eine GUI zu erstellen. Die GUI soll ich über WFA machen. Zitieren
Klotzkopp Geschrieben 21. Dezember 2011 Geschrieben 21. Dezember 2011 habe allerdings nur Visual .NEt zur Verfügung gestellt bekommen.Welche Version von Visual Studio .NET? 2002 oder 2003? Ich habe den Sourcecode für das Tool bereits fertig, nun aber nur noch diese Woche um eine GUI zu erstellen. Die GUI soll ich über WFA machen.Geht es immer noch um diesen Zeilenzähler-Tool? Das besteht doch zum größten Teil aus Ein- und Ausgabe, die du für ein GUI sowieso umschreiben musst. Am schnellsten wäre vermutlich, das Tool komplett in C# neu zu schreiben. Zitieren
schnixx Geschrieben 21. Dezember 2011 Autor Geschrieben 21. Dezember 2011 2003... Ich wollte die Eingabe über eine DialogBox realisieren und nach der Verarbeitung das Ergebnis evtl. in eine TextBox und auf jeden Fall auch in eine Datei schreiben. Zitieren
schnixx Geschrieben 21. Dezember 2011 Autor Geschrieben 21. Dezember 2011 gibt es vorschläge ohne das komplette umschreiben c#? dafür fehlt mir wohl ein wenig die zeit... wie bereits erwähnt, möchte ich in einer dialogbox eine datei angeben, die dann über ifstream eingelesen wird und folglich bearbeitet wird. danke! Zitieren
Klotzkopp Geschrieben 21. Dezember 2011 Geschrieben 21. Dezember 2011 gibt es vorschläge ohne das komplette umschreiben c#? dafür fehlt mir wohl ein wenig die zeit...Wie gesagt, ich vermute, neu schreiben geht schneller. Du brauchst für den ifstream-Konstruktor den Dateinamen in einem char*. PtrToStringChars bringt dir da nicht viel, weil du damit einen wchar_t* bekommst. Besser ist vermutlich Methode 2 mit Marshal::StringToHGlobalAnsi, da bekommst du gleich den richtigen Typ. Du musst natürlich dann ifstream auch mit der richtigen Variablen aufrufen. In deinem letzten Beispiel benutzt du immer noch den System::String*. Zitieren
schnixx Geschrieben 22. Dezember 2011 Autor Geschrieben 22. Dezember 2011 if(OpenFileDialog1->ShowDialog() == DialogResult::OK) { //StreamReader * input = new StreamReader(OpenFileDialog1->FileName); String * input = OpenFileDialog1->FileName; StreamReader* srFromStream = new StreamReader( File::OpenRead( input ) ); //MessageBox::Show(sr->ReadToEnd()); //textBox1->Text = srFromStream->ReadToEnd(); //textBox1->ScrollBars = ScrollBars::Vertical; //in2->Close(); String* line; while ((line = srFromStream->ReadLine())) { //Prüfung ob Zeilen den Anforderungen entspricht if(line->Length > 0 && line->StartsWith( "[" )) { // b=line->Contains( "[" ); //Falls Prüfung zutrifft wird die Zeile im ersten Durchlauf in der map angelegt, //bei allen weiteren wird der Zähler erhöht ++StrMap[*line]; // textBox1->Text = line; } } } Fehlermeldung: error C2679: binary '[' : no operator found which takes a right-hand operand of type 'System::String' (or there is no acceptable conversion) Kann mir jmd helfen, bzgl. der map ohne alles komplett umzuschreiben. Denke ich bin da schonmal auf einen guten Weg. Komme aber nun nicht weiter. Danke Zitieren
Klotzkopp Geschrieben 22. Dezember 2011 Geschrieben 22. Dezember 2011 Das ist immer noch dasselbe Problem: System::String nach std::string. Du hast das Problem bei ifstream (C++-Klasse) umgangen, indem du auf StreamReader (.NET-Klasse) umgestiegen bist. Wenn du bei std::map (C++-Klasse) bleiben willst, wirst du trotzdem nicht drumherum kommen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.