在头文件中,我已经前向声明了命名空间的两个成员:
namespace Foo {
struct Odp
typedef std::vector<Odp> ODPVEC;
};
class Bar
{
public:
Foo::ODPVEC baz; // C2036
};
编译器产生的错误是:
error C2036: 'Foo::Odp *': unknown size
我猜这是前向声明的问题Odp
。我怎样才能解决这个问题?
在头文件中,我已经前向声明了命名空间的两个成员:
namespace Foo {
struct Odp
typedef std::vector<Odp> ODPVEC;
};
class Bar
{
public:
Foo::ODPVEC baz; // C2036
};
编译器产生的错误是:
error C2036: 'Foo::Odp *': unknown size
我猜这是前向声明的问题Odp
。我怎样才能解决这个问题?
不要转发声明Odp
。编译器不知道类型std::vector<Odp>
是什么,因为Odp
还没有声明。为编译器提供该类的完整声明。
std::vector
需要第一个模板参数的完整类型声明,因为它按值而不是指针存储对象,因此需要了解对象大小。如果您将指针存储在向量中,您可能会摆脱前向声明,例如:
class foo;
typedef std::vector<foo*> foo_ptr_vec;
有关详细信息,请参阅详细文档。