对于作业,我将使用以前创建的类作为类型来创建自定义单链接列表。

但是,在自定义列表类中的任何方法中为列表创建节点时,我得到的节点类型未解析。我已经包含了正确的头文件,并且位于正确的名称空间中。我不知道为什么会这样。下面是一个示例:

#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中成员headtail的类型从RiderList *更改为RiderNode *(这取决于RiderList的预期设计,但在大多数情况下,列表是节点链)。

09-10 07:33