Program stürzt beim Constructor ab
-
Hallo,
Ich habe mir folgenden Constructor in meine User Klasse geschrieben:
User(bool justCreate, MYSQL* connection = NULL, string account = NULL, string password = NULL) : m_Connection(connection) { if (!justCreate) { query = "SELECT * FROM accounts WHERE account='" + account + "' AND password='" + password + "'"; if (mysql_query(connection, query.c_str()) == NULL) { myResult = mysql_use_result(connection); if ( (myRow = mysql_fetch_row(myResult)) != NULL) { m_ID = atoi(myRow[0]); m_Account = myRow[1]; m_Password = myRow[2]; m_RegisterDate = atoi(myRow[3]); m_RegisterDateString = myRow[4]; m_LastLogIn = atoi(myRow[5]); m_LastLogInString = myRow[6]; m_IsAdmin = atoi(myRow[7]); m_isCorrupt = false; } else m_isCorrupt = true; } else { m_isCorrupt = true; } mysql_free_result(myResult); } }Der Sinn der Sache ist, dass wenn das erste Beispiel verwende, sollte der Constructor nichts tun:
User* currentUser = new User(true); // Program stürzt ab
User* currentUser = new User(false, Connection, "Account", "Passwort") // klappt
er* currentUser = new User(true, Connection, "Account", "Passwort") // klappt auch?!!Seht ihr vielleicht einen Fehler?!
PS: Ich denke das Thema gehört sehr wohl in dieses Forum, da es ja eigentlich nix mit Datenbanken, sondern einfach mit dem Constructor zu tun hat :p
Dankeschön,
Sam
-
Omg tut mir echt leid für diesen dummen Thread, habs rausgefunden.
Der Constructor sollte so aussehen:
User(bool justCreate, MYSQL* connection = NULL, string account = "", string password = "");

-
Du musst die String-Parameter übrigens nicht kopieren, wenn du sie innerhalb der Funktion nicht änderst. Nimm Const-Referenzen.
User::User(/*...*/, const std::string& account = "", /*...*/)Und willst du den Konstruktor wirklich inline definieren? In C++ ist der gängige Weg eher, dass Funktionsdeklarationen im Header und Definitionen in der .cpp-Datei stehen. Und
using namespacein Headerdateien ist auch eine schlechte Idee.(Ja, meine Kristallkugel ist gerade frisch poliert ;))