1

タイトルがややこしいので、説明させてください。

次のような構造体のベクトルを持つ構造体があります。

struct foo {
int x;
vector < foo > bar;
};

しかし、次の構文を試すと、「オーバーロードされたメソッドのインスタンスがありません」というエラーが表示されます。

foo a;
foo b;
b.x = 3;
a.bar.push_back(b);

a基本的に、 と の間に「関係」を作成しようとしているだけでbbarの関連するすべてのインスタンスを含む関係ベクトルですfoo

助言がありますか?

4

2 に答える 2

3

残念ながら、C++ 標準によれば、あなたのコードは違法です。これは、不完全な型をテンプレート パラメーターとして標準ライブラリに渡しているためです。これは一般的に禁止されstd::vectorており、一般的な規則の例外はありません。

Boost のドキュメントにはすばらしい説明があります。

Boost のように不完全な型を明示的にサポートするコンテナーを使用するかstd::vector<std::unique_ptr<foo>>、標準が 20.9.1p5 で述べているように を使用できます。

のテンプレート パラメータTunique_ptr不完全な型である可能性があります。

于 2013-11-02T22:02:02.330 に答える
-1

それはあなたのコンパイラかもしれません.Mineはエラーや警告を出しません.

#include <iostream> 
#include <vector>
using namespace std;



struct foo {
int x;
vector < foo > bar;
};


int main()
{
foo a;
foo b;
b.x = 3;
a.bar.push_back(b);
cout<<a.bar[0].x;
    cout<<"\n";
return 0;
} 

ここに画像の説明を入力

于 2013-11-02T21:48:19.450 に答える