我在java中编写了以下代码:
class node{
int key;
node left ,right;
public node(int item ){
key = item;
left = right = NULL;
}
它在java中运行良好但是当我尝试在c ++中实现相同的东西时,它显示错误,“错误:字段'左'具有不完整类型'节点'”。 任何人都可以解释这是怎么回事?以及如何删除此错误?我想知道这两种语言是如何实现的。
答案 0 :(得分:6)
在Java中,当您声明某个对象类型的变量时,您实际上只将其声明为该对象的引用。在C ++中,一个对象声明为
node left;
表示left
是node
类的实际实例。并且为了能够定义一个实例,需要完整的类定义。
在类中,当声明成员变量和函数时,该类实际上尚未完全定义,直到结束}
才会发生。
要将变量声明为引用,您需要使用&
字符,例如
node& left;
或使用指针,如
node* left;
当需要链接到对象时,指针是最常见的,因为引用的语义是这样的,一旦初始化引用就不能更改为引用另一个对象。
所有这些,以及更多,应该是in any good beginners C++ book,我建议你找到并阅读一个。