Первый раз здесь. Я новичок в C++ и много часов пытался вычислить это. Извините, что вопрос, который кажется общим. Я не мог найти ответ на всю жизнь.Невозможно создать экземпляр абстрактного класса, но у меня есть
Я получаю следующее сообщение об ошибке компиляции в визуальной студии:
error C2259: 'Node' : cannot instantiate abstract class
due to following members:
'void Node::printValue(void)' : is abstract.
Это мое понимание того, что это означает чистую виртуальную функцию, которую я создал не был реализован в дочернем классе. Из всего, что я вижу, он был реализован в дочернии intNode. Что я здесь делаю неправильно? Код ниже. Заранее спасибо!
В node.h:
class Node {
protected:
Node* nextNodePtr;
public:
Node();
Node* getNextNodePtr(void);
void setNextNodePtr(Node*);
~Node();
virtual void printValue() = 0;
};
class intNode : public Node {
int nodeInteger;
public:
virtual void printValue()
{
cout << "***" << endl;
}
intNode(int i)
{
nodeInteger = i;
}
};
В node.cpp:
void intNode::printValue()
{
cout << "It's an int: " << nodeInteger << endl;
}
void Node::printValue()
{
cout << "This is just here fix compile error" << nodeInteger << endl;
}
Edit ... извините, я забыл добавить этот бит. Ошибка указана на этот раздел в главном
int main()
{
Node* firstNode = new Node; <---- this line is where the error points
firstNode = new intNode;
intNode* intNode = new intNode;
Где код, вызывающий ошибку? И почему вы определяете 'intNode :: printValue()' дважды? И почему вы (пытаетесь) использовать 'nodeInteger' в члене' Node'? – Mat
У вас, похоже, есть два определения 'intNode :: printValue()' (один встроенный в заголовке и один в Node.cpp). Вероятно, это приведет к ошибке во время соединения, но я сомневаюсь, что это вызывает тот, который вы видите. Это может показаться глупым, но вы уверены, что пытаетесь создать 'intNode', а не' Node'? –
Помимо всех упомянутых ошибок, я предполагаю, что вы пытаетесь создать экземпляр узла, но узел является абстрактным. Использовать Node * node = new intNode (5); Не используйте узел Node node = intNode ... –