C++ 没有构造函数的实例匹配参数列表参数类型是:(std::string, double)

C++ no instance of constructor matches the argument list argument types are: (std::string, double)

你好,我正在从一本有点烂的书中学习,当我完成这一章时,我没有发现任何关于这个错误的信息,我尝试了大约一周的时间来修复它,但我付不起钱,所以我来到这里 xd。这里有一些代码"declaration":

class variable {
public:
    string name;
    double value;
};

还有:

    double define_name(string var, double val)
{
    if (is_declared(var)) error(var, "declared twice");
    var_table.push_back(variable(var,val));
    return val;
}

这是我在 visual studio 中出现以下错误的代码,强调 "variable "

(E0289) 没有构造函数实例 "varaible::variable" 匹配参数列表

编译器给你的错误信息准确无误。这里有两个可能的修复:

  1. 定义构造函数
  2. 使用大括号初始化

更多详情:

定义构造函数:

class variable {
public:
    variable(string n = {}, double v = 0.0) : name{n}, value{v} {}
    string name;
    double value;
};

指定合理的默认值可确保您也可以对"default"实例化使用相同的构造函数。

关于第二种方法,你只需要使用大括号初始化,如下所示:

    var_table.push_back( {var, val} );

它的工作方式是将提供的初始化列表(按位置)匹配到 struct/class 的成员,使用默认值(数字为 0,用户定义类型为默认构造函数)尾随的,即 var_table.push_back( {var} ); 相当于 var_table.push_back( {var, {}} ); 相当于 var_table.push_back( {var, 0.0} );