声明结构时的C ++问题

时间:2011-09-20 17:34:34

标签: c++ struct

我无法看到以下(非常人为的)代码中出现了什么问题。这可能是我在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]'无效

5 个答案:

答案 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;
}