我对C++非常陌生,因为我对学习这种语言非常感兴趣,所以我正在尝试将我以前的C++项目转换成C++。其中一个是basic LinkedList,它应该存储类"ListElement“的对象,其中包含类"Table”的对象(基本上是餐馆的表列表)。到目前为止,我可以在没有任何错误的情况下翻译Table类。一切按规则进行(头文件"Table.h“中的类声明,源代码文件”Table.cpp“中的实现)。在main.cpp中,我可以创建一个Table实例,操作数据并打印出来。因此,对我来说,Table类似乎像在Java中那样工作。当涉及到ListElement类时,我在特定的地方遇到了麻烦,我不知道我在C++中做错了什么,因为它在C++中工作得很好。基本上,这似乎是一个声明问题,我无法诚实地解决;所以,这就是为什么我需要你的帮助。
下面是我的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上使用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;而且效果很好。
我是遗漏了什么还是做错了什么?
发布于 2015-11-02 19:01:35
在java私有ListElement中,下一步;只创建对另一个类型为ListElement的对象的引用。
但在C++,情况并非如此。在每个ListElement类型的对象中,都会创建另一个ListElement类型的对象,从而创建无限递归。
您可以创建指向另一个ListElement的指针。
ListElement * next;发布于 2015-11-02 19:05:35
在Java中,每个非原始变量实际上都是一个指针.因此,它们可以是null。
在C++中,当您编写ListElement next;时,这不是一个指针。不可能是nullptr。因此,您正在尝试定义一个无限递归的数据结构,因为ListElement包含一个ListElement,它包含一个包含ListElement的ListElement,一个包含一个…的
这就是为什么需要next为可空/可选值的原因,例如指针。它用作递归的基本情况。
有关相关问题,请参见Why do linked lists use pointers instead of storing nodes inside of nodes
https://stackoverflow.com/questions/33484824
复制相似问题