Я пытаюсь создать 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;
}
Вы забыли tp разместить точку с запятой после определения класса.
В этом случае компилятор рассматривает объявление класса выше конструктора Node()
class Node{
//...
}
Node::Node(){
val = 0;
pPrv = NULL;
pNxt = NULL;
}
как его тип возврата.
;
после объявления вашего класса.pPrv
иpNxt
будут действительными. Если вы удалите узел, на который указываетpNxt
, оригинал будет обновлен, но копия все равно будет иметь свой старый указатель `pNxt, теперь указывающий на удаленный узел.