0

質問があります。AwesomeData のベクトルがあり、AwesomeData クラスに AwesomeData のベクトルが含まれているとします。最初のベクトル内のベクトルにアクセスしようとすると、正しく機能しません。私が知っているように、これはここでは明確ではありませんが、より明確な例があります:

struct AwesomeData
{
public:
    AwesomeData()
    : beautifulInt(3)
    {}

    int beautifulInt;
    vector<AwesomeData> someVector;
};

int main()
{
    vector<AwesomeData> tata;
    AwesomeData toto;

    toto.someVector.push_back(AwesomeData());
    toto.someVector.push_back(AwesomeData());
    toto.someVector.push_back(AwesomeData());

    tata.push_back(AwesomeData());
    tata.push_back(toto);
    tata.push_back(AwesomeData());


    // So, now tata should containt the data of someVector of toto (3 default    
    // AwesomeData). Instead of that, his capacity is equal to 3, but his
    // size = 0. So, what's wrong ?
    tata = tata[1].someVector;
}

しかし、それだけではありません。回避策を見つけましたが、なぜそれが機能するのかわかりません。

struct AwesomeData
{
public:
    AwesomeData()
        : beautifulInt(3)
    {}

    int beautifulInt;
    vector<AwesomeData> someVector;
};

int main()
{
    vector<AwesomeData> tata;
    AwesomeData toto;

    toto.someVector.push_back(AwesomeData());
    toto.someVector.push_back(AwesomeData());
    toto.someVector.push_back(AwesomeData());

    tata.push_back(AwesomeData());
    tata.push_back(toto);
    tata.push_back(AwesomeData());


    // If we use a second vector to temporaly stock the vector of toto,
    // everything work as expected
    vector<AwesomeData> tempVector;

    tempVector = tata[1].someVector;
    tata = tempVector;
}

誰でもアイデアがありますか?

本当にありがとう

4

1 に答える 1

3

標準コンテナでは、不完全な型でインスタンス化することはできません。あなたの例AwesomeDataでは、をインスタンス化しようとすると、完全に定義されていませんstd::vector<AwesomeData>

boost::containerこれを達成するには、ライブラリを見ることができます。

Boost::コンテナを参照

于 2013-04-09T14:34:26.530 に答える