C ++ LinkedList ListElement类头文件麻烦

时间:2015-11-02 18:54:05

标签: java c++ linked-list singly-linked-list code-translation

我对C ++很陌生,因为我对学习这门语言非常感兴趣,我试图将旧的Java项目翻译成C ++。其中一个是基本的LinkedList,它应该存储类" ListElement"的对象。包含类"表"的对象(基本上是餐馆的桌子清单)。 到目前为止,我可以翻译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;

它运作得很好。

我错过了什么或者我做错了什么?

2 个答案:

答案 0 :(得分:1)

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

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

您可以使用

创建指向另一个ListElement的指针
ListElement * next;

答案 1 :(得分:0)

在Java中,每个非原始变量实际上都是一个指针。因此,它们可以是null

在C ++中,当你编写ListElement next;时,那不是指针。它不能是nullptr。因此,您尝试定义无限递归数据结构,因为ListElement包含ListElement,其中包含ListElement,其中包含ListElement,包含...

这就是您需要next成为可空/可选值的原因,例如指针。它是递归的基础案例。

有关相关问题,请参阅Why do linked lists use pointers instead of storing nodes inside of nodes