我在类的私有成员变量中有一行代码:
vector<double> dQdt(3)
在xcode中编译时,会出现“预期参数声明符”错误。我想我提供了足够的信息。我没有看到这个声明有什么问题。
答案 0 :(得分:8)
您必须在构造函数的初始化列表中初始化变量:
class X
{
private:
vector<double> dQdt;
public:
X() : dQdt(3) {}
};
答案 1 :(得分:4)
如果您阅读例如this member initialization reference您将了解默认成员初始化必须是大括号或等于初始化程序。即你需要使用大括号:
def func(s1, s2):
if len(s1) != len(s2):
raise ValueError("Strings must be the same length")
total = 0
for ind, ele in enumerate(s1):
total += int(ele) * int(s2[ind])
return total
或使用等号:
vector<double> dQdt{3};
由于这是随C ++ 11标准引入的,因此您需要在您的环境中启用它。
答案 2 :(得分:2)
数据成员构造函数的参数应写在您的类的初始化列表中。构造函数。也就是说,而不是
class Foo {
vector<double> dQdt(3);
};
你应该写
class Foo {
public:
Foo() : dQdt(3) {}
private:
vector<double> dQdt;
};
答案 3 :(得分:2)
除了在构造函数的初始化列表中初始化之外,还可以使用大括号初始化列表进行初始化:
class Foo {
vector<double> dQdt{3};
};
错误的实际文本是因为编译器期望您声明一个函数,接受某种类型的参数,然后返回vector<double>
。 3
不是函数参数的有效声明。
答案 4 :(得分:1)
我在尝试编译具有初始化向量的 C++ 代码时遇到此错误。 在初始化部分将 () 更改为 {} 对我有用; 早些时候我的代码是这样的:
vector<vector<int>> minA(11, vector<int>(11, INT_MAX));
我更改了代码,用花括号替换了圆括号,错误消失了。
vector<vector<int>> minA{11, vector<int>(11, INT_MAX)};
答案 5 :(得分:0)
以下问题已经得到解答,但也可以使用。
(),这对于分配初始值可能更有用。例如,是42的24倍。)
const int default_value = 42;
struct foo
{
vector<double> hour{vector<double>(24,default_value)};
};