2013-10-30 20 views
0

爲什麼explicit vector (size_type n)表格在班級之外工作,但不在裏面? 這編譯:std :: vector ctor在類之外編譯,但不在裏面?

#include <vector> 

int main() { 
    std::vector<int> vec_(3); // set capacity to 3 
    return 0; 
} 

但不是這樣的:

#include <vector> 

class C { 
public: 
    std::vector<int> vec_(3); // set capacity to 3 
}; 

int main() { 
    return 0; 
} 

g++ --std=c++0x -Wall -Wextra -g a.cpp 
a.cpp:5:27: error: expected identifier before numeric constant 
a.cpp:5:27: error: expected ‘,’ or ‘...’ before numeric constant 

爲什麼? :(

+7

這不是你如何初始化類中的數據成員。誰教你的? – 0x499602D2

+1

因爲您通過類構造函數調用成員構造函數。 – crashmstr

回答

7

做的正確的方式,這將是:

class C { 
public: 
    C() : vec_(3) {} // set capacity to 3 in constructor initialization list 
    std::vector<int> vec_; 
}; 
4

你想要的是:

class C { 
public: 
    std::vector<int> vec_; 
    C() : vec_(3) { } 
}; 

這將控制在構造一個C對象是如何構建vec_

2

因爲這不是C++中的有效語法,正確的方法是:

#include <vector> 

class C { 
public: 
    std::vector<int> vec_; 

public: 
    // You add a constructor and initialize member data there: 
    C() : vec_(3) {} 
}; 

還有其他方法可以做到這一點,但這是使用最廣泛和最容易找到的方法。

相關問題