矢量声明"expected parameter declarator"

Vector declaration "expected parameter declarator"

本文关键字:parameter declarator expected 声明      更新时间:2023-10-16

在类的私有成员变量中有一行代码:

vector<double> dQdt(3)

在xcode中编译时,会给出一个错误"expected parameter declarator "。我想我已经提供了足够的信息。我看不出这份声明有什么不妥。

你必须在构造函数的初始化列表中初始化变量:

class X 
{
    private:
     vector<double> dQdt;
    public:
     X() : dQdt(3) {}
};

如果你读这个成员初始化引用,你会知道默认的成员初始化必须是大括号或等号初始化。也就是说,你需要使用大括号:

std::vector<double> dQdt{ 0.0, 0.0, 0.0 };

或使用相等字符:

std::vector<double> dQdt = std::vector<double>(3);

由于这是在c++ 11标准中引入的,所以您需要在您的环境中启用它。

我得到了这个错误,而试图编译我的c++代码有一个初始化的向量。在初始化部分将()改为{}为我工作;之前我的代码是这样的:

vector<vector<int>> minA(11, vector<int>(11, INT_MAX));

我修改了代码,用大括号代替了圆括号,错误消失了。

vector<vector<int>> minA{11, vector<int>(11, INT_MAX)};

数据成员的构造函数的形参应该写在类的构造函数的初始化列表中。也就是说,不用

class Foo {
    vector<double> dQdt(3);
};

你应该写

class Foo {
public:
    Foo() : dQdt(3) {}
private:
    vector<double> dQdt;
};

除了在构造函数的初始化列表中进行初始化外,还可以使用大括号初始化列表进行初始化:

class Foo {
    vector<double> dQdt{3};
};

错误的实际文本是因为编译器期望您声明一个函数,接受某种类型的参数,并返回vector<double>3不是函数参数的有效声明。

这个问题已经回答了,但是下面的方法也可以。
(在赋初始值时可能更有用。比如24乘以42。)

const int default_value = 42;
struct foo
{
    vector<double> hour{vector<double>(24,default_value)};
};