我正在尝试使用这个程序,我有一个MySQL结果表,我正在迭代这些行。每行有5列,我想将每个字段存储到类的私有数据成员中。然后,一旦我有了这个类,我想把类推回到类类型的向量中。所以在我的main.cpp中我有:
Wine wines("None", 0, 0, 0, "None");
应该调用这个构造函数:
Wine::Wine(string inputName, int inputVintage, int inputRating, int inputScore, string inputType) {
name = inputName;
vintage = inputVintage;
rating = inputRating;
score = inputScore;
type = inputType;
}
回到主页:
vector<Wine> wineVector;
res = mysql_perform_query(conn, (char*)cmd.str().c_str()); //cmd is just a ostringstream holding the query.
loadResultsToVector(wines, wineVector, res);
其中loadResultsToVector定义为:
void loadResultsToVector(Wine w, vector<Wine> wineVec, MYSQL_RES *results) {
MYSQL_ROW row;
while((row = mysql_fetch_row(results)) != NULL) {
w(row[0], row[1], row[2], row[3], row[4]); //Initializes Wine w, error occurs here.
wineVec.push_back(w);
}
mysql_free_result(results); //Clears result table
}
因此,当我尝试使用行中的信息初始化类时,我收到此错误:
no match to call to '(Wine) (char*&, char*&, char*&, char*&, char*&)'
w(row[0], row[1], row[2], row[3], row[4]); //Initializes Wine w, error occurs here.
^
有什么想法吗?
答案 0 :(得分:0)
这是错误的:
Wine w,
// ...
w(row[0], row[1], row[2], row[3], row[4]);
编译器认为您要在operator()
对象上调用w
,或者w
是一个函数。我想你想在Wine
上调用构造函数并初始化w
参数:
w = Wine(row[0], row[1], row[2], row[3], row[4]);
但是为什么要让w
成为一个函数参数。这个:Wine w(row[0], row[1], row[2], row[3], row[4]);
就足够了。
另一个问题是你的构造函数需要不同的参数。它的签名是:string, int, int, int, string
,而不是四个char*
。所以你需要进行转换。