矢量声明"预期参数声明器"

nm1*_*m17 4 c++ vector

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

vector<double> dQdt(3)
Run Code Online (Sandbox Code Playgroud)

在xcode中编译时,会出现"预期参数声明符"错误.我想我提供了足够的信息.我没有看到这个声明有什么问题.

Abh*_*602 12

我在尝试编译具有初始化向量的 C++ 代码时遇到此错误。 将 () 更改为 {} 在初始化部分对我有用; 早些时候我的代码看起来像这样:

vector<vector<int>> minA(11, vector<int>(11, INT_MAX));
Run Code Online (Sandbox Code Playgroud)

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

vector<vector<int>> minA{11, vector<int>(11, INT_MAX)};
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用。我可以在哪里阅读更多相关内容? (2认同)

Ram*_*man 8

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

class X 
{
    private:
     vector<double> dQdt;
    public:
     X() : dQdt(3) {}
};
Run Code Online (Sandbox Code Playgroud)

  • @ nm17编译器将您的声明混淆为函数声明. (3认同)

tim*_*rau 6

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

class Foo {
    vector<double> dQdt(3);
};
Run Code Online (Sandbox Code Playgroud)

你应该写

class Foo {
public:
    Foo() : dQdt(3) {}
private:
    vector<double> dQdt;
};
Run Code Online (Sandbox Code Playgroud)


Som*_*ude 5

如果您阅读例如该成员初始化参考,您将了解默认成员初始化必须是大括号或等于初始化程序。也就是说,您需要使用大括号:

vector<double> dQdt{3};
Run Code Online (Sandbox Code Playgroud)

或使用等于字符:

vector<double> dQdt = std::vector(3);
Run Code Online (Sandbox Code Playgroud)

由于这是C ++ 11标准引入的,因此您需要在您的环境中启用它。


Mar*_*ica 5

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

class Foo {
    vector<double> dQdt{3};
};
Run Code Online (Sandbox Code Playgroud)

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