簡體   English   中英

標題中的std :: vector大小

[英]std::vector size in header

我對std :: vector有一個小問題。 在main.hi中嘗試使用固定大小的int向量

std::vector<int> foo(7);

但是g ++給出了這個錯誤:

../test/main.h:21:26: error: expected identifier before numeric constant
 std::vector<int> foo(7);
../main/main.h:21:26: error: expected ',' or '...' before numeric constant

如何創建固定大小長度的私有向量變量? 或者我應該簡單地在構造函數中

for(int i=0; i<7;i++){
    foo.push_back(0);
}

假設foo是數據成員,則語法無效。 通常,您可以像這樣初始化類型為T的數據成員:

T foo{ctor_args};

或這個

T foo = T(ctor_args);

但是, std::vector<int>有一個帶有std::initializer_list<int>的構造std::initializer_list<int> ,這意味着第一個表單將產生一個帶有單個元素值為7的size-1向量。所以你堅持使用第二種形式:

std::vector<int> foo = std::vector<int>(7);

如果你堅持使用pre-C ++ 11編譯器,則需要使用構造函數:

class bar
{
public:
    bar() : foo(7) {}
private:
  std::vector<int> foo;
};

並注意在所有構造函數中初始化向量(如果適用)。

初始化類成員(除了內置類型)的最有效方法是使用初始化列表。

所以這里最好的解決方案是在類構造函數的啟動列表中構造長度為7的向量:

(我還建議您使用定義作為固定值7.如果在未來中將其更改為8,則不必更改所有代碼中的值7)

file.h:

#define YOURCLASSFOOSIZE 7
class yourClass
{
public:
    yourClass(): foo(YOURCLASSFOOSIZE) {}
private:
    std::vector<int> foo;
};

file.cpp:

for(int i=0; i < YOURCLASSFOOSIZE; i++)
{
    foo.push_back(0);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM