为什么初始化堆栈时会出现此错误
Why do i get this error when initialising a stack?
我知道下面的代码不正确,但我真的很想知道为什么它是不可能的。
struct nod {
int val;
nod a;
};
当然,我应该让它nod *a
,但是为什么我在编译时得到字段a
类型不完整?但是,我可以在结构中a
一个指针,该指针模拟在使用new运算符释放一些空间后链接到内存的另一部分。
编译器的错误消息非常清楚:
field 'a' has incomplete type
当编译器到达该行代码时,nod
尚未完全定义。 为了在类中具有类型 nod
的成员,编译器至少需要知道nod
有多大。 由于nod
尚未完全定义,因此编译器无法知道nod
的大小。
之所以使用点头*
works is because the compiler doesn't need to know what is in a
点头in order to know how big a pointer-to-
点头nod
点头'的原因是。
即使nod
是完全定义的,您仍然无法执行此操作。 一个nod
会有另一个nod
,另一个nod
,以此类推,永远如此。 就像拿着镜子站在镜子前一样。
想一想:如果nod
包含另一个nod
,而又包含另一个nod
,其中......(随意),nod*
实际上是无限大的!
因为编译器知道需要为nod
(通常是 32 位或 64 位)分配多少内存,即使nod
本身尚未完全定义。换句话说,编译器只需要在该指针字段中保留一个 32 位或 64 位插槽。
另一方面,如果字段是nod
,则编译器必须知道nod
对象需要容纳多少内存,这在nod*
本身未完全定义时是不可能的。
关于你愿意做什么,你的问题还不够清楚。
不完整类型错误意味着您正在尝试声明其类型仅被前向声明的变量。
如果仅执行前向声明,例如:
class nod;
编译器知道 nod 是在其他地方定义的类。然后,可以声明 nod
类型的指针变量。您不能取消引用它,也不能声明类型 CC_27 的变量。为此,编译器需要完整的类声明:
class nod
{
int someVariable;
char someOtherVariable;
}
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 分段错误 - 读取初始化指针的数组
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 修复未初始化的局部变量错误
- 初始化迭代器错误 C++ 在 GCC 编译器中
- 在 gtest 中初始化堆栈上的引用变量的隔离错误
- 类型为 "Bucket&"(未限定的 const 限定)的引用不能使用 "SortedList." 类型的值进行初始化 如何修复此错误?
- 使用直接大括号初始化时,C++ 编译错误"声明末尾的预期";"
- 为什么我在向量初始化时收到此错误?
- C1001内部编译器错误是由于矢量初始化(如数组)引起的
- 初始化thread_local叮当中的错误
- Eclipse:错误:初始化模式失败(无法连接到目标)
- C 错误:初始化量太多
- Seg 错误初始化列表向量与控制台输入
- 通过传递的指针段错误初始化 char 数组
- c++错误:初始化器元素不是常量
- C++错误:初始化结构实例的向量数组成员
- Visual Studio C++11g编译错误-初始化程序过多
- OpenCV 错误:初始化 OpenCLDevices 中的 GPU API 调用 (-1001)