我正在尝试为作为双向链表节点的类构建模板文件。每当我尝试编译时,都会遇到此错误。

ISO C ++禁止无类型的“ DNode”声明

似乎响应于我的返回DNode指针的函数。我已经为此工作了好几天,而且似乎无法做到这一点。

#ifndef DNODE_H
#define DNODE_H
#include <cstdlib>
#include <string>
#include <iostream>
#include <iterator>

template <class T>
class DNode
{
    public:
        DNode(T StartingData = T(), DNode* PrevLink = NULL, DNode* NextLink = NULL)
            {Data = StartingData; previous = PrevLink; next = NextLink;}

        void setData(T item)
            {Data = item;}

        void setNext(DNode *l)
            {next = l;}
        void setPrevious(DNode *l)
            {previous = l;}

        *DNode getPrevious() {return previous;}
        *DNode getNext() {return next;}

        T getData()
            {return Data;}

    private:
        DNode *previous, *next;
        T Data;
};

#endif

最佳答案

这只是一个错字:

*DNode getPrevious() {return previous;}
*DNode getNext() {return next;}


应该:

DNode* getPrevious() {return previous;}
DNode* getNext() {return next;}


除此之外,代码看起来还不错。您可能想要进行大括号样式的设计,某些功能难以阅读,并且构造函数作为mem初始化程序列表会更好。同样,CapCase通常仅用于类名,因为变量更喜欢camelCase(或snake_case,以任何一个为准)。因此,我将这样写您的构造函数:

DNode(T startingData = T(), DNode* prevLink = NULL, DNode* nextLink = NULL)
    : data(startingData)
    , previous(prevLink)
    , next(nextLink)
{ }

关于c++ - ISO C++禁止声明无类型的“DNode”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36122039/

10-09 01:47