【问题标题】:C++ no instance of constructor matches the argument list argument types are: (std::string, double)C ++没有构造函数实例匹配参数列表参数类型是:(std :: string,double)
【发布时间】:2019-11-18 16:31:39
【问题描述】:

你好,我正在从一本有点糟糕的书中学习,当我读完这一章时,我没有发现任何关于这个错误的信息,我尝试了大约一周来修复它,但我没有负担,所以我来到这里 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”的实例与参数列表匹配

【问题讨论】:

  • 您的类定义中没有构造函数。你有两个变量。你需要声明一个构造函数,它接受两个参数,字符串和双精度。
  • 我该怎么做呢?因为我使用了一些构造函数,但是这本书没有解释它是如何工作的,所以我真的不知道如何声明它。
  • 也许我明白了:“D`变量(字符串变量,双值){}`这样好吗?

标签: visual-studio variables constructor instance


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 2016-03-05
    • 1970-01-01
    相关资源
    最近更新 更多