C ++:虚拟空函数错误“显式类型丢失(假设为int)”

时间:2015-11-18 04:18:35

标签: c++ inheritance constructor syntax-error virtual

该程序包含一个名为collection的类,它包含虚函数函数。我在main中创建的动态数组应该能够接受来自文件的任意数量的整数,每行包含一个文件号。它允许用户指定他们想要读取的文件名。这是头文件:

#ifndef Collection_H
#define Collection_H
class collection{
public:
    collection(); //constructor
    virtual void add(int value) = 0; //adds the value to the array
    virtual void remove(int index) = 0; //removes and item from the appropriate index location
    virtual void print() = 0; //prints item of the array comma seperated. 
    virtual int get(int index) = 0; //gets item at a particular index.
    virtual int sum() = 0; //gets the sum of the array
    virtual int size() = 0; //gets the size of the array
};

我对这个程序的第一个问题更具概念性:虚拟实际上做了什么,为什么要使用它,你如何实际实现它?我知道,因为你必须创建一个派生类才能实现虚函数。因此,这是我的派生类头:

// this is the derived collection
#include "Collection.h"
#ifndef derivedcollection_H
#define derivedcollection_H
class derivedcollection: public collection
{
public:
    collection(); //constructor (error is at this line)
    virtual void add(int value) = 0; //adds the value to the array
    virtual void remove(int index) = 0; //removes and item from the appropriate index location
    virtual void print() = 0; //prints item of the array comma seperated. 
    virtual int get(int index) = 0; //gets item at a particular index.
    virtual int sum() = 0; //gets the sum of the array
    virtual int size() = 0; //gets the size of the array
};
#endif

我的下一个也是最后一个问题更多的是我得到的一个我不理解的简单错误。对于collection();在我的派生类derivedcollection中声明,我收到一个错误,指出“显式类型缺失(假定'int')”。虽然这通常是一个简单的错误修复,但老实说它为什么它给我这个错误有点令人困惑。当我在我的派生类头而不是我的基类头中声明它时,它如何为我的默认构造函数提供此错误?

2 个答案:

答案 0 :(得分:1)

有大量关于virtual方法的文献和YouTube视频。关于错误,您的构造函数应为derivedcollection(),而不是collection()

答案 1 :(得分:1)

有助于实现动态多态性的虚函数(OOP的支柱)在Web的许多教程中都有解释。

其中一个是explained here

virtual void add(int value) = 0;表示它可能没有任何定义的 纯虚函数 。派生类必须实现其定义。

请注意,collection不是派生类derivedcollection的构造函数。

因此,编译器假定其返回类型为整数。即它是一种简单的方法。

构造必须是derivedcollection()而不是collection()