Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java和C+中类和对象实现的差异+;_Java_C++_Oop - Fatal编程技术网

java和C+中类和对象实现的差异+;

java和C+中类和对象实现的差异+;,java,c++,oop,Java,C++,Oop,我用java编写了以下代码: class node{ int key; node left ,right; public node(int item ){ key = item; left = right = NULL; } 它在java中工作得很好,但是当我尝试在C++中实现同样的事情时,它显示了一个错误:“错误:字段左”没有完整的类型“节点”。 有人能解释这是怎么发生的吗?我能做些什么来消除这个错误?我想知道这两种语言是如何实现的。在Java中,当您声明某个对象类型的

我用java编写了以下代码:

class node{
  int key;
  node left ,right;
  public node(int item ){
  key = item;
  left = right = NULL;
 }

它在java中工作得很好,但是当我尝试在C++中实现同样的事情时,它显示了一个错误:“错误:字段左”没有完整的类型“节点”。


有人能解释这是怎么发生的吗?我能做些什么来消除这个错误?我想知道这两种语言是如何实现的。

在Java中,当您声明某个对象类型的变量时,实际上只将其声明为对该对象的引用。在C++中,一个声明为

的对象
node left;
表示
left
节点
类的实际实例。为了能够定义实例,需要类的完整定义

在类内部,当声明成员变量和函数时,该类实际上还没有完全定义,直到关闭
}
时才会发生

要将变量声明为引用,需要使用
&
字符,如

node& left;
或者使用指针,如

node* left;
当需要链接到对象时,指针是最常见的,因为引用的语义是这样的,一旦初始化,引用就不能更改为引用另一个对象


这一切,以及更多,应该是,我建议你找到并阅读其中一个。

C++中,你必须使用指针来实现与<代码>左、右节点相同的事情;<代码>您在Java中拥有的。例如,
节点*左、右。顺便说一句,您应该将类命名为
节点
,而不是
节点
@DatNguyen,该声明仅将
声明为指针。类名中第一个字符的上下小写是个人喜好或公司风格指南。C++不是java。请不要用java作为C++代码的模型。