Я пишу простой проект и сейчас у меня 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;
}