我无法看到以下(非常人为的)代码中出现了什么问题。这可能是我在mystruct
中声明了2号向量的方式。但这不是我们如何声明一个大小为2的向量,我们还没有初始化它的内容吗?
struct mystruct
{
int a;
int b;
vector<double> c(2); };
int main(int argc, char *argv[])
{
mystruct test;
(test.c)[0]=3.4;
(test.c)[1]=1.8;
return 0; }
编译器向我发出以下错误消息:
g ++ -Wall simple.cpp
simple.cpp:18:错误:数字常量之前的预期标识符
simple.cpp:18:错误:在数字常量之前预期','或'...'
simple.cpp:在函数'int main(int,char **)'中:
simple.cpp:32:错误:数组的类型'[int]'无效 下标
simple.cpp:33:错误:数组下标
的类型'[int]'无效答案 0 :(得分:6)
您无法在类定义中初始化mystruct::c
,这必须在构造函数中完成。
struct mystruct {
mystruct() : c(2) { }
vector<double> c;
};
答案 1 :(得分:2)
您正试图在c
声明中构建 struct
。矢量仅在构造时具有尺寸。尝试:
struct mystruct {
mystruct(): c(2) {}
int a;
int b;
vector<double> c;
};
mystruct()
构造函数使用成员初始化语法c(2)
来构建c
。
答案 2 :(得分:2)
如果要初始化向量(调用向量的构造函数)
,则需要构造函数struct mystruct
{
int a;
int b;
vector<double> c;
mystruct():
c(2)
{
}
};
答案 3 :(得分:2)
这不是C ++的工作原理。
声明类时,不能指定成员对象的构造函数(静态常量积分除外)。相反,您必须在类的构造函数初始化列表中为成员指定构造函数参数:
class Foo
{
std::vector<int> v;
public:
Foo() : v(2) { }
};
答案 4 :(得分:1)
这不是一个有效的声明:
vector<double> c(2);
你可能想要:
vector<double> c;
然后,在主要:
int main(int argc, char *argv[])
{
mystruct test;
test.c.push_back(3.4);
test.c.push_back(1.8);
return 0;
}