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 namespace in Headerdateien ist auch eine schlechte Idee.

    (Ja, meine Kristallkugel ist gerade frisch poliert ;))


Anmelden zum Antworten