Sqlite3 в классе не работает при вызове из другого класса - PullRequest
0 голосов
/ 13 февраля 2019

Я пишу простой проект и сейчас у меня 2 класса.Один для базы данных и один для методов auth.

Класс метода Auth использует экземпляр класса базы данных, и все работает нормально, но когда я хочу выполнить некоторый код для чтения из базы данных, это просто не проходит.SQL-запрос генерируется как следует, но не выполняется (оператор cout в функции обратного вызова никогда не печатается).

Все нормально, когда я хочу использовать оба класса из основного файла, и когда я хочу использовать функции, которые не требуют базы данных.

SO: Пытался не включать экземпляр БД вauth class, но для проверки используется основной файл, и он работает таким образом.

//main file
int main()
{
    database db("database.db");
    auth auth(db);

    string email = "mail.com";
    string pass = "medo";
    std::cout << auth.password(&pass, &email);

    //database.h
};
class database {
public:
    database(const char* path);
    string hash(string* data);
    dbUserData checkUser(string* email);

private:
    sqlite3* db;
    static int callbackUsers(void* dataptr, int argc, char** argv, char** azColName);
};

//database.cpp

dbUserData database::checkUser(string* email)
{

    dbUserData dataread;
    dbUserData* data = &dataread;
    std::string _query = fmt::format("SELECT * from users where eMail = '{0}';", *email);
    //std::string _query = "SELECT * from users where eMail = 'ivik@outlook.com';";
    const char* query = _query.c_str();
    std::cout << query << std::endl;
    rc = sqlite3_exec(db, query, callbackUsers, (void*)data, &zErrMsg);

    if (rc) {
        ;
        //fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
        //return (false);
    }
    else {

        //fprintf(stdout, "Opened database successfully\n");
        //return (true);
    }
    //std::cout <<"Output should be"<< dataread.password << std::endl;
    return dataread;
}

//auth.h

using std::string;
class auth {
public:
    auth(database _db);
    bool password(string* pass, string* email);

private:
    database* db;
};

//auth.cpp

auth::auth(database _db)
{
    db = &_db;
}

bool auth::password(string* pass, string* email)
{
    string b = db->checkUser(&mail).password; //RETURNS BLANK STRING
    std::cout << "b" << b << std::endl;
    if (a == b)
        return true;

    return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...