2014-10-29 57 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