C++ 节点链表中的对象

C++ 节点链表中的对象,c++,linked-list,C++,Linked List,我正在尝试创建一个库存链表,用户可以在其中添加产品(id、信息、价格、计数),然后将对象存储在链表中。 我所面临的问题是,节点类给出了“缺失类型说明符-int假设。注意:C++不支持默认int”等,在节点类中的每个语句。 #ifndef INVENTORY_H #define INVENTORY_H #include<iostream> #include <string> #include <iomanip> using namespace s

我正在尝试创建一个库存链表,用户可以在其中添加产品(id、信息、价格、计数),然后将对象存储在链表中。 我所面临的问题是,节点类给出了“缺失类型说明符-int假设。注意:C++不支持默认int”等,在节点类中的每个语句。
#ifndef INVENTORY_H
#define INVENTORY_H

#include<iostream>
#include <string>       
#include <iomanip>
using namespace std;

 class Node
{
public:
    Node(){}
    Node(const Inventory& theData, Node *theLink)
        : data(theData), link(theLink){}
    Node* getLink() const { return link; }
    Inventory getData() const { return data; }
    void setData(const Inventory& theData)
    {
        data = theData;
    }
    void setLink(Node *theLink) { link = theLink; }
private:
    Inventory data;
    Node *link;     //pointer that points to next node
};

class Inventory
{
public:
    Inventory();
    void addPart(int, string, int, int);
    void findPart(int);
    void toBinary();
    void quit();
private:
    int id;
    int price;
    string partInfo;
    int partCount;

    Node* first;
    Node* last;
    int count;
};
#endif

C++编译器从上到下读取源代码。当它到达第13行时,它还没有听说过

库存类型。它认为
Inventory
因此必须是参数名,这让人非常困惑

解决方法是切换
节点
库存
类的顺序,并通过插入以下行在
库存
类开始之前预先声明
节点

class Node;
课程清单开始之前

切换顺序时,在
节点
之前定义了
清单
,这一点很重要,因为编译器需要了解
清单
的所有信息才能构造
节点
,因为
节点
包含
清单
s。额外的一行告诉编译器有一个
节点
类,但是;通过这种方式,您可以使用指向
节点
的指针(或不需要了解
节点布局的任何其他指针),但在完全定义它们之前,无法对它们执行任何其他操作。由于
Inventory
只使用指针,所以这应该不是问题



但是,如前所述,我不明白为什么
Inventory
需要节点指针;似乎你的
库存
类就是你在英语描述中所说的产品,产品不需要知道其余的数据。您可能还想使用,而不是尝试实现自己的链表类型。

您只是在看一个标准的编译器案例,因为您定义的顺序,不知道自定义类型是什么。即使您向前声明一个类(将“类清单”放在上面的某个地方),您也不能将其用于某些事情。声明不是指针的成员变量就是其中之一

但是,如果反转定义(节点之前的库存)并向前声明节点(“类节点;”),则代码将编译,因为库存类中只有节点*

查看此答案以了解更多详细信息:


正如所指出的,如果此代码不是严格用于学习的,那么这不是最佳设计。STL容器涵盖了最常见的数据结构(双链接列表和单链接列表是其中的两种)。分别使用stl::list和stl::forward_list。

仅使用
std::list
std::vector
有什么问题?为什么要重新发明轮子?
class Node;