简体   繁体   中英

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 by 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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM