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

时间:2019-11-18 16:31:39

标签: visual-studio variables constructor instance

你好,我正在从一本有点烂的书中学习,当我完成本章时,我没有发现任何关于此错误的信息,我一周尝试了aprox来修复它,但我负担不起,所以我来了xd。这里有一些代码“声明”:

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中遇到以下错误的代码,强调了“变量”

(E0289)没有构造函数“ varaible :: variable”的实例与参数列表匹配

1 个答案:

答案 0 :(得分:0)

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

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

更多详细信息:

定义构造函数:

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

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

对于第二种方法:您需要做的就是使用括号初始化,如下所示:

    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} );