Alo*_*ave 13
错误的根本原因是什么?
当您转发声明类型时,编译器会将其视为不完整类型.
前向声明告诉编译器存在所述类型,并且不再存在关于特定类型的内容.因此,您无法对该类型执行任何需要编译器知道其内存布局的操作(如创建对象或解除引用该类型的指针).
解:
如果需要遵循结构成员,则无法转发声明.您需要在源文件中包含头文件.这将确保编译器知道该类型的内存布局.您必须相应地设计您的项目.
Luc*_*ore 10
要访问成员,需要完整定义。您需要include
在 内的标头b.cpp
,而不仅仅是向前声明struct
(这会产生不完整的类型)。
编辑:
前向声明足以用于:
class B;
class C
{
B& b;
B* b;
B foo();
foo(B b);
};
Run Code Online (Sandbox Code Playgroud)
但不是为了
class B;
class C
{
B b; //ERROR
B foo()
{
B x; //error
x.whatever(); //error
return B(); //error
}
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
41567 次 |
最近记录: |