ошибка в конструкторе узла для связанного списка c ++

0

Я пытаюсь создать LinkedList из ints, и для этого я создал класс Node. но компилятор постоянно дает мне ту же ошибку. я искал по всей сети, и ответы, которые я нашел, не работали, или я их не понимал.

ошибка следующая:
строка 51: новые типы не могут быть определены в возвращаемом типе
строка 51: спецификация типа возвращаемого значения для конструктора недействительна

все 4 конструктора имеют одинаковую проблему, ошибка в строке 51 является только первой из четырех.

вот мой класс Node со всем, что у него есть. я не копировал геттеры и сеттеры, потому что у них нет ошибок, а код полуочевиден.

большое спасибо. Энди

class Node{

private:
    int val;
    Node* pPrv;
    Node* pNxt;

public:
    Node();
    Node(Node&);
    Node(int);    
    Node(int, Node*, Node*);

    void setVal(int auxVal);
    void setPrv(Node* auxPrv);
    void setNxt(Node* auxNxt);

    int getVal();
    Node* getPrv();
    Node* getNxt();
}

Node::Node(){ //this is line 51
    val = 0;
    pPrv = NULL;
    pNxt = NULL;
}

Node::Node(Node &node2){ //this line has exactly the same error
    val = node2.getVal();
    pPrv = node2.getPrv();
    pNxt = node2.getNxt();
}

Node::Node(int valAux){ //so does this one
    val = valAux;
    pPrv = NULL;
    pNxt = NULL;
}

Node::Node(int valAux, Node* prvAux, Node* nxtAux){ //and also this one
    val = valAux;
    pPrv = prvAux;
    pNxt = nxtAux;
}
  • 1
    Вам не хватает точки с запятой ; после объявления вашего класса.
  • 0
    Кстати, будьте осторожны с вашим конструктором копирования. Копирование узла может привести к неприятным последствиям, если вы удалите узел из списка и ожидаете, что pPrv и pNxt будут действительными. Если вы удалите узел, на который указывает pNxt , оригинал будет обновлен, но копия все равно будет иметь свой старый указатель `pNxt, теперь указывающий на удаленный узел.
Показать ещё 1 комментарий
Теги:
linked-list
nodes

1 ответ

1
Лучший ответ

Вы забыли tp разместить точку с запятой после определения класса.

В этом случае компилятор рассматривает объявление класса выше конструктора Node()

class Node{
//...
}
Node::Node(){
    val = 0;
    pPrv = NULL;
    pNxt = NULL;
}

как его тип возврата.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню