3

ヘッダーファイルで、名前空間の2つのメンバーを前方宣言しました。

namespace Foo {
    struct Odp
    typedef std::vector<Odp> ODPVEC;
};

class Bar
{
public:
     Foo::ODPVEC baz; // C2036
};

コンパイラによって生成されるエラーは次のとおりです。

error C2036: 'Foo::Odp *': unknown size

これはフォワード宣言の問題だと思いOdpます。どうすればこれを回避できますか?

4

2 に答える 2

3

前方宣言しないでくださいOdp。まだ宣言されていないstd::vector<Odp>ため、コンパイラはタイプが何であるかを認識していません。Odpコンパイラにそのクラスの完全な宣言を与えます。

于 2010-06-15T00:43:36.420 に答える
3

std::vector最初のテンプレートパラメータの完全な型宣言が必要です。これは、オブジェクトをポインタではなくで格納するため、オブジェクトサイズの知識が必要になるためです。次のように、ポインタをベクトルに格納すると、前方宣言を回避できる場合があります。

class foo;
typedef std::vector<foo*> foo_ptr_vec;

残酷な詳細については、詳細なドキュメントを参照してください。

于 2010-06-15T00:58:06.617 に答える