无法实例化抽象类,但我有

时间:2013-11-20 06:08:32

标签: c++ abstract-class pure-virtual

第一次来电。我是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;

2 个答案:

答案 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()两次。这是不正确的。