【问题标题】:Error undefined reference to vtable MyClass错误未定义对 vtable MyClass 的引用
【发布时间】:2021-05-31 07:19:19
【问题描述】:
#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, double B)
            :amount(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::print,尽管你说你会。
  • 如果您打算以多态方式使用它们,您还应该添加virtual ~Currency()
  • 之前我在主要的 Dollar.print() 和 euro.print() 中调用它,但它给出了一个错误 no mathing function for call to Dollar:print,所以我不明白如何在 main 中调用它.当我覆盖打印时,它会给出标记的覆盖但不会覆盖
  • virtual void print()const; 采用 0 个参数。对于覆盖此方法的方法,它必须采用 0 个参数
  • 你没有将实例传递给其他成员,为什么你将一个传递给print

标签: c++ virtual-functions


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    相关资源
    最近更新 更多