2014-10-29 88 views
0

我定义了一个结构如下。std ::结构中的向量定义

extern int x; 
a = 1; 
b = 2; 
x = a*b; 
struct bStruct 
{ 
    unsigned long Cycles;      
    unsigned long Time;           
    std::vector<unsigned long> Chunks(x); 
}; 

x在大块定义被标记为与它下方的红线错误。

的错误信息是:

变量 “x” 是不是一个类型名称。

为什么发生这个错误,我该如何解决?

+0

有了这个字符串'的std ::矢量<无符号长>大块(X);'你要怎么办?将矢量的大小设置为x?如果你使用C++ 98,没有一个int参数的构造函数试试这个'std :: vector Chunks(x,0);'或者你可以在bStruct的构造函数中初始化这个向量。 – 2014-10-29 09:29:43

+3

获取[book](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。您无法通过StackOverflow学习C++。 – 2014-10-29 09:55:00

+0

感谢您的有益帮助!我会检查出书。 – goosli 2014-10-29 11:39:37

回答

4

你的编译器认为Chunks是一个函数,解析它就像这样:

std::vector<unsigned long> Chunks(x); 
      |    |  | 
      |    |  +---Wait a sec huh ? what type is 'x' ?? 
      |    | 
      |    +---------Function name Chunks 
      +----------Return Type std::vector<unsigned long> 

你想Chunks成为数据成员,它需要使用初始化:

struct bStruct 
{ 
    unsigned long Cycles;      
    unsigned long Time;           
    std::vector<unsigned long> Chunks; 

    bStruct() : Chunks(x) 
    { 
     // Constructor 
    } 
}; 
+0

感谢您的回答。有用!我对C++非常陌生,所以请耐心等待。我还有一些问题:1为什么在bStruct()中有括号:块?为什么它不是bStruct()。大块? 2为什么std :: vector (x)而不是x? 3最后大括号的用法是什么?谢谢! – goosli 2014-10-29 09:40:58

+0

这里的最后一行定义了'bStruct'的构造函数,这个构造函数使用'std :: vector (x)'初始化''Chunks'初始化列表(参见[here](http:// en .cppreference.com/w/cpp/language/initializer_list),虽然对于初学者可能有更清楚的解释) – Dettorer 2014-10-29 09:50:56

+2

它是一个默认构造函数(不带参数)。在':'后面是一个初始化列表,这意味着'bStruct'变量'Chunks'由std :: vector (x)引入,'{}'是构造函数的空主体。它与'bStruct(){Chunks = std :: vector (x); }' – 2014-10-29 09:52:40

1

std::vector<unsigned long> Chunks(x);编译器会将块视为函数而不是变量。 在struct(class)的定义中不允许初始化struct成员。 您可以使用建筑功能修复:

struct bStruct 
{ 
    unsigned long Cycles;      
    unsigned long Time;           
    std::vector<unsigned long> Chunks; 
    bStruct(int x):Chunks(x) {}; 
}; 
+0

谢谢!我对C++非常陌生,所以请耐心等待。我还有一些问题:1什么是bStruct():块意味着什么或它做了什么? 2为什么块的大小是std :: vector (x)而不是x? 3最后大括号的用法是什么?非常感谢! – goosli 2014-10-29 09:51:32

+0

@goosli初始化列表比赋值初始化更有用。 – wangsquirrel 2014-10-30 07:55:43