第一次来电。我是C ++的新手,并且已经尝试了几个小时来解决这个问题。很抱歉问一下这似乎是一个常见的问题。我无法找到生命的答案。
我在visual studio中遇到以下编译错误:
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;
}
编辑...对不起,我忘了添加这一点。该错误指向主
中的此部分int main()
{
Node* firstNode = new Node; <---- this line is where the error points
firstNode = new intNode;
intNode* intNode = new intNode;
答案 0 :(得分:2)
您不能创建抽象类的实例。消息说明了,你知道,所以不要这样做。
int main()
{
Node* firstNode; // do not create Node instance here.
// It's a compile time error and even if not,
// it would have been a memory leak.
firstNode = new intNode;
intNode* intNode = new intNode;
答案 1 :(得分:0)
以下陈述不正确。
据我了解,这意味着我创建的纯虚函数尚未在子类中实现。
错误表示void Node::printValue(void)
中的void foo() = 0
是纯虚拟的(即Node class
)。这使Node类成为抽象。由于您无法实例化抽象类,因此您会看到错误。
此外,正如评论中所提到的,您已定义void intNode::printValue()
两次。这是不正确的。