对 vtable MyClass 的未定义引用错误

问题描述

#include<iostream>
using namespace std;

class Currency
{
    public:
        virtual double toRubles()const = 0;
        virtual void print()const;
};

class Dollar: public Currency
{
    private:
        double amount;
        double rate;
    public:
        Dollar(double A,double B)
            :amount(A),rate(B)
        {}
        Dollar()
            :amount(0),rate(0)
        {}
        double GetA()const{return amount;}
        double GetB()const{return rate;}
        void SetA(double A){amount=A;}
        void SetB(double B){rate=B;}

        double toRubles()const override
        {
            return amount*rate;
        }

        void print(const Dollar& dollar)
        {
            cout << "Dollar:\n";
            cout << "\t amount  = " << dollar.GetA() << endl;
            cout << "\t rate = " << dollar.GetB() << endl;
            cout << "\t Rubles to Dollar = " << dollar.toRubles() << endl;
        }
};
class Euro: public Currency
{
    private:
        double amount;
        double rate;
    public:
        Euro(double A,rate(B)
        {}
        Euro()
            :amount(0),rate(0)
        {}
        double GetA()const{return amount;}
        double GetB()const{return rate;}
        void SetA(double A){amount=A;}
        void SetB(double B){rate=B;}

        double toRubles()const override
        {
            return amount*rate;
        }

        void print(const Euro& euro)const
        {
            cout << "Euro:\n";
            cout << "\t amount  = " << euro.GetA() << endl;
            cout << "\t rate = " << euro.GetB() << endl;
            cout << "\t Rubles to Euro = " << euro.toRubles() << endl;
        }

};

int main(){
    double a,b,c,d;
    cout << "Amount for DOLLAR:" ;
    cin >> a;
    cout << "Rate for DOLLAR:" ;
    cin >> b;
    cout << "Amount for EURO:" ;
    cin >> c;
    cout << "Amount for EURO:" ;
    cin >> d;
    Dollar dollar(a,b);
    Euro euro(c,d);

}

编译时出现错误 undefined reference to vtable for Currencyld returned 1 exit status。没有虚函数,一切正常,当它们被调用时,程序给出了 print 方法错误

程序必须将特定值从美元和欧元转换为卢布。类Currency必须有两个虚函数进行转换toRubles然后输出print

解决方法

您需要完全按照 Currency 中声明的方式覆盖 Dollar 和 Euro 类中的 virtual void print()const;。同样在货币类中,必须定义函数或纯函数 (= 0)。