ISO C++ забранява декларирането на DNode без тип

Опитвам се да създам шаблонен файл за клас, който е възелът за двойно свързан списък. Всеки път, когато се опитвам да компилирам, срещам тази грешка.

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

person Gregar543    schedule 21.03.2016    source източник
comment
Какво, по дяволите, трябва да бъде *DNode в *DNode getPrevious()? Това не е правилно.   -  person Captain Obvlious    schedule 21.03.2016


Отговори (1)


Това е просто правописна грешка:

*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)
{ }
person Barry    schedule 21.03.2016
comment
Уау, честно казано, малко се смутих, че прекарах толкова време в търсене на нещо толкова малко. Благодаря и за всички добавени съвети. Все още съм в първата си година в университета и трябва да убия всички тези лоши навици - person Gregar543; 21.03.2016