我正在尝试为作为双向链表节点的类构建模板文件。每当我尝试编译时,都会遇到此错误。
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/