C++ 错误:与调用<类构造函数(字符*&、字符*&、字符*&、字符*&)不匹配

C++ Error: no match to call <class constructor (char*&, char*&, char*&, char*&)

本文关键字:字符 不匹配 构造函数 错误 调用 C++ lt      更新时间:2023-10-16

我要使用此程序要做的是我有一个mysql结果表,并且我正在迭代行。每行有5列,我想将每个字段存储到类的私人数据成员中。然后,一旦我拥有该类,我想将类推入类类型的向量。所以在我的主角。我有:

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.
                                        ^

有什么想法?

这是错误的:

Wine w,
// ...
w(row[0], row[1], row[2], row[3], row[4]);

编译器认为您要在w对象上调用operator(),或者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*。因此您需要进行转换。