当前位置: 首页 > 知识库问答 >
问题:

C LinkedList ListElement类头文件故障[重复]

袁志专
2023-03-14

我对C非常陌生,因为我对学习这种语言非常感兴趣,所以我正在尝试将我的旧Java项目翻译成C。其中一个是基本LinkedList,它应该存储“ListElement”类的对象,其中包含“Table”类的对象(基本上是餐厅的表列表)。到目前为止,我可以翻译Table类而没有任何错误。一切按规则进行(头文件“Table.h”中的类声明,源代码文件“Table.cpp”中的实现)。基本上。cpp我可以创建表的实例,操作数据并将其打印出来。所以对我来说,Table类似乎和Java中的一样工作。当涉及到ListElement类时,我在特定的点上遇到了问题,我不知道我在C中做错了什么,因为在Java中它就是这样工作的。基本上,这似乎是一个申报问题,我不能诚实地弄清楚;这就是为什么我需要你的帮助。

这是我的清单。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;

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

我的清单。cpp如下所示:

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

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

}
ListElement::ListElement(){

}
ListElement::~ListElement(){

}

在我的记忆中。cpp我在IDE中遇到以下错误:“声明中的异常规范与以前的声明不匹配”

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

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

它工作得很好。

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

共有2个答案

孙博艺
2023-03-14

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

在C语言中,当您编写ListElement Next;时,这不是指针。不能是nullptr。因此,您试图定义一个无限递归的数据结构,因为ListElement包含一个ListElement,其中包含一个ListElement,其中包含一个ListElement,其中包含一个...

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

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

单喜
2023-03-14

在java私有列表元素下;仅创建对ListElement类型的另一个对象的引用。

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

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

ListElement * next;
 类似资料:
  • 主要内容:1. 事务失败,2. 系统崩溃,3.磁盘故障要找到问题发生的位置,我们将故障(失败)归纳为以下类别: 事务失败 系统崩溃 磁盘故障 1. 事务失败 当事务无法执行或者它到达无法继续执行的点时发生事务失败。 如果一些事务或进程受到损害,那么这称为事务失败。 事务失败的原因可能是 - 逻辑错误:如果由于某些代码错误或内部错误情况导致事务无法完成,则会发生逻辑错误。 语法错误:它发生在DBMS本身终止活动事务的位置,因为数据库系统无法执行它。 例

  • 每当我试图运行我的GUI时,我在Eclipse WindowBuilder中都会得到奇怪的结果,左上角的区域出现了错误的文本(我真的不知道该怎么称呼这个问题)。我试着到处搜索,但显然没有其他人遇到这个问题。 图像问题:显示显示为Displa,“搜索”被置乱。 问题图片: 我试着创建一个新项目,试着重新安装eclipse,删除我所有的eclipse元文件,重新下载WindowBuilder,甚至从我

  • 我想知道是否可以在Kafka制作程序中配置2个不同的Kafka集群。 目前我正试图让我的制片人 我正在使用Apache Kafka 2.8和Python 3.7的confluent_kafka==1.8.2包。 生产商代码下方: 当我杀死clusterB时,我得到了以下错误消息。

  • 本页将试图表列一些常见问题,以及如何避免或修正他们。 使用 Google Mail 你需要使用以下配置: 使用 'smtp' 做为驱动。 SMTP 主机应该是 "ssl://smtp.gmail.com"。 SMTP 连接埠应该是 465 你应该设定 'newline' 为 "\r\n"。

  • Cadence是一个容错的有状态代码平台。cadence如何在各种故障情况下处理故障?

  • Webpack 的配置比较复杂,很容出现错误,下面是一些通常的故障处理手段。 一般情况下,webpack 如果出问题,会打印一些简单的错误信息,比如模块没有找到。我们还可以通过参数 --display-error-details 来打印错误详情。 $ webpack --display-error-details Hash: a40fbc6d852c51fceadb Version: webpa