首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ LinkedList ListElement类头文件故障

C++ LinkedList ListElement类头文件故障
EN

Stack Overflow用户
提问于 2015-11-02 18:54:04
回答 2查看 283关注 0票数 0

我对C++非常陌生,因为我对学习这种语言非常感兴趣,所以我正在尝试将我以前的C++项目转换成C++。其中一个是basic LinkedList,它应该存储类"ListElement“的对象,其中包含类"Table”的对象(基本上是餐馆的表列表)。到目前为止,我可以在没有任何错误的情况下翻译Table类。一切按规则进行(头文件"Table.h“中的类声明,源代码文件”Table.cpp“中的实现)。在main.cpp中,我可以创建一个Table实例,操作数据并打印出来。因此,对我来说,Table类似乎像在Java中那样工作。当涉及到ListElement类时,我在特定的地方遇到了麻烦,我不知道我在C++中做错了什么,因为它在C++中工作得很好。基本上,这似乎是一个声明问题,我无法诚实地解决;所以,这就是为什么我需要你的帮助。

下面是我的ListElement.h的样子:

代码语言:javascript
复制
#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 */

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

代码语言:javascript
复制
   ListElement next;

(我在Mac上使用XCode )我的IDE给出了以下错误:“字段有不完全类型的‘ListElement’‘”

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

代码语言:javascript
复制
#include "ListElement.h"
#include "Table.h"

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

}
ListElement::ListElement(){

}
ListElement::~ListElement(){

}

在我的ListElement.cpp中,我在IDE中得到以下错误:“声明中的异常规范与以前的声明不匹配”

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

代码语言:javascript
复制
public class ListElement {
    private Table value;
    private ListElement next;

而且效果很好。

我是遗漏了什么还是做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-02 19:01:35

在java私有ListElement中,下一步;只创建对另一个类型为ListElement的对象的引用。

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

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

代码语言:javascript
复制
ListElement * next;
票数 1
EN

Stack Overflow用户

发布于 2015-11-02 19:05:35

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

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

这就是为什么需要next为可空/可选值的原因,例如指针。它用作递归的基本情况。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33484824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档