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