C++LinkedList ListElement类头文件出现问题



我对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 next中;仅创建对ListElement类型的另一个对象的引用。

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

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

ListElement * next;

在Java中,每个非基元变量实际上都是一个指针。因此它们可以是CCD_ 1。

在C++中,当您编写ListElement next;时,它不是指针。不可能是nullptr。因此,您试图定义一个无限递归数据结构,因为ListElement包含一个ListElement,它包含一个包含ListElementListElement,它包含…

这就是为什么您需要next是一个可以为null/可选的值,例如一个指针。它是递归的基本情况。

有关相关问题,请参阅为什么链表使用指针而不是将节点存储在节点内

相关内容

  • 没有找到相关文章