【发布时间】:2017-01-26 09:10:21
【问题描述】:
我在一个类的私有成员变量中有一行代码:
vector<double> dQdt(3)
在 xcode 中编译时,会出现“预期参数声明符”错误。我想我提供了足够的信息。我认为这个声明没有任何问题。
【问题讨论】:
我在一个类的私有成员变量中有一行代码:
vector<double> dQdt(3)
在 xcode 中编译时,会出现“预期参数声明符”错误。我想我提供了足够的信息。我认为这个声明没有任何问题。
【问题讨论】:
你必须在构造函数的初始化列表中初始化变量:
class X
{
private:
vector<double> dQdt;
public:
X() : dQdt(3) {}
};
【讨论】:
如果您阅读例如this member initialization reference 您将了解到默认成员初始化必须是大括号或等于初始化程序。 IE。您需要使用花括号:
std::vector<double> dQdt{ 0.0, 0.0, 0.0 };
或使用等号:
std::vector<double> dQdt = std::vector<double>(3);
由于这是随 C++11 标准引入的,因此您需要在您的环境中启用它。
【讨论】:
type var{some_default_val};(如您所示),或者 3) 使用等号字符 type var = some_default-val;(就像你也展示的那样)。
数据成员的构造函数的参数应该写在你类的构造函数的初始化列表中。也就是说,而不是
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 不是函数参数的有效声明。
【讨论】:
3 的向量。与 OP 的代码不同,如果它有效,它将创建 3 个零。
我在尝试编译具有初始化向量的 C++ 代码时遇到此错误。 在初始化部分将 () 更改为 {} 对我有用; 之前我的代码是这样的:
vector<vector<int>> minA(11, vector<int>(11, INT_MAX));
我更改了代码以用大括号替换圆括号,错误消失了。
vector<vector<int>> minA{11, vector<int>(11, INT_MAX)};
【讨论】:
以下问题已经得到解答,但也可以。
(这对于分配初始值可能更有用。例如 24 乘以 42。)
const int default_value = 42;
struct foo
{
vector<double> hour{vector<double>(24,default_value)};
};
【讨论】: