1

私はこの構造体を持っています

struct myStruct {
    int a;
    int b;
    }

を作成して、型の空のベクトルにvector <vector<myStruct> > V初期化したいnvector<myStruct>

次のように塗りつぶしコンストラクターを使用しようとしています。

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
4

3 に答える 3

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);
于 2013-11-01T13:22:25.223 に答える
2

省略してtempください。内部にあるクラスのコンストラクターは次のVようになります。

MyClass(size_t n) : V(n) {}
于 2013-11-01T13:22:02.540 に答える
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) {}
    // ...
};

この種の初期化には、イニシャライザ リストを使用します。

于 2013-11-01T13:23:26.180 に答える