2016-05-31 9 views
-2

Hallo Ich versuche, eine C++ Login-Schnittstelle mit Windows-Anwendungsformulare auf Visual Studio 2013 zu tun. Das Problem ist, dass ich versuche, den Wert in der Textbox mit der Zeile in der Datei zu vergleichen, aber ich bekomme einen Fehler, dass der Operandentyp inkompatibel ist.C++ Login-Schnittstelle mit Windows-Anwendungen

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { 
     string un, pw; 

     ifstream read("file.txt"); 
     getline(read, un); 
     getline(read, pw); 


     if (textBox1->Text = un && textBox2->Text = pw){ 

      MessageBox::Show("You have successfully login!", "Login Message", MessageBoxButtons::OK, MessageBoxIcon::Information); 

     } 

     else { 
      MessageBox::Show("Incorrect Password or Username !", "Login Message", MessageBoxButtons::OK, MessageBoxIcon::Error); 
        } 

     read.close(); 


    } 
+2

Wenn Sie nicht gut in C++ sind und nicht die Sprache lernen wollen, warum Code darin? – SergeyA

+2

Wenn Sie Compilerfehler haben, sollten Sie sie teilen. Es ist nicht schön, die Fehler zu horden. – NathanOliver

+0

@NathanOliver, wollen einen Anteil von mir? :) – SergeyA

Antwort

0

Zwei Dinge schief gehen hier:

if (textBox1->Text = un && textBox2->Text = pw){ 

Problem 1: un ist ein std::string, a C++ standard library string, und textBox1->Text ist System::String ^, ein verwalteter Zeiger auf a .Net string.

Die Typen sind sehr unterschiedlich und nicht implizit (automatisch) vergleichbar. Sie müssen eines zu dem anderen konvertieren, um sie zu vergleichen. Da es im Allgemeinen viel ärgerlicher ist, eine System::String in eine std::string umzuwandeln, als umgekehrt, da System::String eine lokalisierte, breite zeichenbasierte Zeichenfolge ist, gehen wir mit dem Pfad des geringsten Widerstands.

if (textBox1->Text = gcnew String(un.c_str()) && textBox2->Text = gcnew String(pw.c_str())){ 

Jetzt sind die Werte des gleichen Typs, System::String. Dies stellt das Problem 2 dar.

Problem 2: = ist der Zuweisungsoperator. Dies versucht derzeit un zu textBox1->Text zuzuordnen, nicht zu vergleichen. Du meinst zu schreiben:

if (textBox1->Text == gcnew String(un.c_str()) && textBox2->Text == gcnew String(pw.c_str())){ 
0

In C++ ist Ihr Zuweisungsoperator '=', Ihr Vergleichsoperator ist '=='.

Sie werden Ihren Code ändern möchten: if (textBox1-> Text == un & & textBox2-> Text == pw)

+0

Der Fehler ist immer noch derselbe. Welche Operandentypen sind inkompatibel ("System :: String ^" und "std :: string") – Lily

+0

Das liegt daran, dass sie * unterschiedliche Typen sind. [Sie mischen C++ und CLI] (https://en.wikipedia.org/wiki/C%2B%2B/CLI) Datentypen. Diese Antwort kann helfen: http://stackoverflow.com/questions/13718188/convert-from-stdstring-to-string Oder direkt aus dem Maul des Pferdes: https://msdn.microsoft.com/en-us/library/ms235219 .aspx – user4581301

+0

Danke! es half ! – Lily