对于作业,我将使用以前创建的类作为类型来创建自定义单链接列表。
但是,在自定义列表类中的任何方法中为列表创建节点时,我得到的节点类型未解析。我已经包含了正确的头文件,并且位于正确的名称空间中。我不知道为什么会这样。下面是一个示例:
#include "RiderList.h"
#include "RiderNode.h"
using namespace cse274;
void RiderList::addToHead(Rider *el){
head = new RiderNode(el,head); //this is where RiderNode is unresolved
if (tail == NULL)
tail = head;
}
根据要求...这是两个标题和确切的错误:
#ifndef RIDERLIST_H_
#define RIDERLIST_H_
#include "RiderNode.h"
namespace cse274{
class RiderList{
public:
RiderList() {
head = tail = 0;
}
~RiderList();
bool isEmpty() {
return head == 0;
}
void addToHead(Rider *ride);
void addToTail(Rider *ride);
Rider *deleteFromHead(); // delete the head and return its info;
Rider *deleteFromTail(); // delete the tail and return its info;
private:
RiderList *head, *tail;
};
}
#endif /* RIDERLIST_H_ */
#ifndef RIDERNODE_H_
#define RIDERNODE_H_
#include "Rider.h"
namespace cse274{
class RiderNode{
public:
Rider *info;
RiderNode *next;
RiderNode(Rider *el, RiderNode *ptr) {
info = el;
next = ptr;
}
};
}
#endif /* RIDERNODE_H_ */
确切的错误消息:
Type 'RiderNode' could not be resolved: name resolution problem found by the indexer
关于为什么会发生这种情况的任何线索?
谢谢!
最佳答案
您的头文件中有一个误导性的using namespace
指令,因此您应删除标头中标明using namespace cse274;
的行并保留namespace cse274 { ... }
。这是关于SO头文件中名称空间具有良好响应的question。
编辑:我发现了我第一次没有看到的另一个问题:
您正在调用RiderNode(Rider *, RiderList *)
构造函数,但仅定义了RiderNode(Rider *, RiderNode *)
构造函数。也许您应该将RiderList中成员head
和tail
的类型从RiderList *
更改为RiderNode *
(这取决于RiderList的预期设计,但在大多数情况下,列表是节点链)。