我正在编码简单项目,现在有2个类。 一种用于数据库,另一种用于auth方法。
Auth方法类使用数据库类的实例,并且一切正常,但是当我想执行一些代码以从数据库中读取数据时,它就不会陷入低谷。 SQL Query会按预期生成,但不会执行(回调函数中的cout语句永远不会打印出来)。
当我想同时使用主文件中的两个类以及想要使用不需要数据库的函数时,一切都很好。
SO: 尝试不在auth类中包含db实例,而是使用主文件进行测试,并且可以这样工作。
//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;
}