不允许抽象类类型“CLASSNAME”的对象?

时间:2016-04-07 04:13:33

标签: c++ header member

我正在为我的计算机科学课开设一个项目,并且刚刚开始上课。我已经完成了(我认为)构建我需要的类,但是我在实现它们时遇到了麻烦。这就是我对main.cpp的所作​​所为:

#include "ElectronicComponent.h"
#include "Resistor.h"
#include "Capacitor.h"
#include "Battery.h"
#include <iostream>
#include <string>
using namespace std;

int main()
{
    const int NUMBER_OF_COMPONENTS = 7;
    ElectronicComponent
        *components[NUMBER_OF_COMPONENTS] =
    {
        new Resistor(5.0),     // These are where my errors are.
        new Capacitor(0.0001),
        new Battery(9.0),
        new Resistor(6.5),
        new Battery(11.1),
        new Capacitor(0.000001),
        new Resistor(10000.0),
        /* create more components here */
    };
    return 0;
}

这是其中一个类的一个例子。

#include "ElectronicComponent.h"
class Resistor :
    public ElectronicComponent
{
public:
    Resistor(double);
    virtual ~Resistor();
    virtual double getValue() const = 0;
    virtual std::string getUnits() const = 0;
    virtual std::string to_string() const = 0;
};

#include "Resistor.h"
#include <string>
double value;
std::string units = "Ohm(s)";

Resistor::Resistor(double v)
{
    value = v;
}

Resistor::~Resistor()
{
}

std::string Resistor::to_string() const
{
    return "Resistor value (" + std::to_string(value) + " " + units + ")";
}
  1. 对于 ElectronicComponent 数组中的每个项目,我应该调用 getValue getUnits 成员函数并显示结果。

  2. 第二次浏览 ElectronicComponent 数组并使用 ElectronicComponent 项目显示输出。

  3. 这是一个例子(假设组件是ElectronicComponent的数组 指针):

    cout << "Component " << count << " " << *components[index] << endl;
    

    目标是使用硬编码的数字最终获得如下输出:

    Component 0 Resistor value (5.000000 Ohm(s))
    Component 1 Capacitor value (0.000100 Farad(s))
    Component 2 Battery value (9.000000 Volt(s))
    Component 3 Resistor value (6.500000 Ohm(s))
    Component 4 Battery value (11.100000 Volt(s))
    Component 5 Capacitor value (0.000001 Farad(s))
    Component 6 Resistor value (10000.000000 Ohm(s))
    

1 个答案:

答案 0 :(得分:0)

Resistor(我假设你的其他ElectronicComponent派生类)方法在声明结尾处不应该有= 0

= 0中的virtual double getValue() const = 0;Resistor的其他方法意味着该方法是纯虚函数。也就是说,它没有实现,只作为要在派生类中重写的接口而存在。包含纯虚方法的类无法实例化。