开发者

C++: Unknown pointer size when forward declaring (error C2036)

In a header file, I have forward declared two members of a namespace:

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

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

The error generated b开发者_JAVA百科y the compiler is:

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

I'm guessing this is an issue with forward declaring Odp. How can I get around this?


Don't forward declare Odp. The compiler does not know what the type of std::vector<Odp> is, because Odp isn't yet declared. Give the compiler a full declaration for that class.


std::vector requires full type declaration of the first template parameter because it stores objects by value, not by pointer, and thus requires knowledge of object size. You might get away with forward declaration if you store pointers in the vector, like:

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

See the fine documentation for gory details.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜