2013-11-01 101 views
1

我有这样的结构初始化用户的矢量的矢量定义

struct myStruct { 
    int a; 
    int b; 
    } 

我想创建一个vector <vector<myStruct> > V并将其初始化类型的n空载体vector<myStruct>

我试图使用在fill constructor 这样的:

vector<edge> temp; 
vector<vector<edge> > V(n, temp); 

此代码工作正常main,但是当我在一个类里面有V时,我该如何在类构造函数中做到这一点。

编辑: 当我在我的类的构造函数,我得到以下错误:
no match for call to '(std::vector<std::vector<edge> >) (int&, std::vector<edge>&)'

代码生成的错误是:

vector<myStruct> temp; 
V(n, temp); // n is a parameter for the constructor 
+1

使用初始化程序列表。 – Kunal

回答

3

首先,请注意temp是没有必要:你的代码是相同的

vector<vector<edge> > V(n); 

我们您的主要问题:当你的载体在类内部,如果成员是非静态的,则使用初始化器列表,或者如果声明部分是静态的,则初始化声明部分中的成员。

class MyClass { 
    vector<vector<edge> > V; 
public: 
    MyClass(int n) : V(n) {} 
}; 

或像这样:

// In the header 
class MyClass { 
    static vector<vector<edge> > V; 
    ... 
}; 

// In a cpp file; n must be defined for this to work 
vector<vector<edge> > MyClass::V(n); 
+0

万一我不能使用初始化列表? 我的构造函数需要一个文件,读取数据,然后需要初始化, 我该怎么做? –

+1

@ Mhd.Tahawi如果你不能使用初始化列表,你可以在构造函数体内使用一个赋值:'MyClass(int n){V = vector >(n); }' – dasblinkenlight

2

只是省略temp。在类的构造函数是V里面应该是这样的:

MyClass(size_t n) : V(n) {} 
0
class A 
{ 
private: 
    std::vector<std::vector<myStruct>> _v; 
public: 
    A() : _v(10) {} // if you just want 10 empty vectors, you don't need to supply the 2nd parameter 
    A(std::size_t n) : _v(n) {} 
    // ... 
}; 

您使用初始化列表对于这种初始化。