This question already has answers here:
Why do linked lists use pointers instead of storing nodes inside of nodes
                                
                                    (10个回答)
                                
                        
                                4年前关闭。
            
                    
我对C ++还是很陌生,因为我对学习这种语言非常感兴趣,所以我试图将旧的Java项目转换为C ++。其中之一是基本的LinkedList,它应该存储“ ListElement”类的对象,其中包含“ Table”类的对象(基本上是餐馆的表列表)。
到目前为止,我可以翻译Table类而没有任何错误。
一切都按规则进行(头文件“ Table.h”中的类声明,源代码文件“ Table.cpp”中的实现)。在main.cpp中,我可以创建Table的实例,处理数据并打印出来。因此对我而言,Table类似乎可以像在Java中那样工作。
当涉及到ListElement类时,我在特定时候遇到了麻烦,而且我不知道我在C ++中做错了什么,因为在Java中,它工作得很好。基本上,这似乎是一个声明问题,我不能坦白地指出。所以这就是为什么我需要您的帮助。

这是我的ListElement.h的样子:

#ifndef ListElement_h
#define ListElement_h

#include "Table.h"

class ListElement{
private:
    Table value;
    ListElement next;
public:
    Table getValue();
    void setValue(Table value);
    ListElement getNext();
    void setNext(ListElement next);

    //Default-Constructor
    ListElement();
    //Custom-Constructor
    ListElement(Table value, ListElement next);
    //Destructor
    ~ListElement();
};

#endif /* ListElement_h */


问题部分似乎是代码的这一部分:

   ListElement next;


(我在Mac OSX上使用XCode)
我的IDE给我以下错误:“字段的类型'ListElement'不完整”

我的ListElement.cpp看起来像这样:

#include "ListElement.h"
#include "Table.h"

ListElement::ListElement(Table value, ListElement next){

}
ListElement::ListElement(){

}
ListElement::~ListElement(){

}


在我的ListElement.cpp中,我的IDE中出现以下错误:“声明中的异常说明与先前的声明不匹配”

在Java中,我具有这样的ListElement(基本上只是代码的重要部分):

public class ListElement {
    private Table value;
    private ListElement next;


而且效果很好。

我错过了什么还是我做错了什么?

最佳答案

在java私有ListElement中;仅创建对ListElement类型的另一个对象的引用。

但是在C ++中,情况并非如此。在ListElement类型的每个对象中,都会创建另一个ListElement类型的对象,从而创建无限递归。

您可以使用创建指向另一个ListElement的指针

ListElement * next;

09-04 17:25