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.
精彩评论