【问题标题】:Abstract class c++ (error LNK 2001: unresolved external symbol)抽象类 c++(错误 LNK 2001:未解析的外部符号)
【发布时间】:2019-02-26 22:38:30
【问题描述】:

当我创建一个实现基类的虚函数的子类的对象时,我收到了这个错误。

错误 LNK2001:无法解析的外部符号“public: virtual void __thiscall CateringOrder::[Order]::calcTotals(void)”(?calcTotals@?QOrder@@CateringOrder@@UAEXXZ)

而我的代码是

class Order
{
private:
    float SANDWICH_PRICE;
    float TOCOS_PRICE;

public:
    string customerType;
    int NumberOfSandwiches;
    int NumberOfTacos;
    float SandwichSubtotal;
    float Subtotal;
    float TacosSubtotal;
    float Total;
    int TotalItems;

    virtual void calcTotals()=0;

    virtual ~Order(){};



};

//子类1

class ConsumerOrder:public Order{
private:
    float SALES_TAX_RATE;
public:
    string CustomerName;
    float SalesTax;
    void calcTotals() override;
    string ToString();

};

// 子类 2

class CateringOrder: public Order
{

public:
    string CustomerCode;
    float DeliveryFee;
    bool PreferredCustomer;
    void Order::calcTotals(void) override;
    string ToString();

};

//其他类

static class Validation
{
public:
    bool CheckCustomerCode();
    bool CheckCustomerType();
    float CheckDeliveryFee();
    int CheckItem();

};

现在,当我创建基类的对象时,它会在编译后显示错误。

bool Validation::CheckCustomerCode()
{
CateringOrder obj;

string tempCode = obj.CustomerCode;

return true;
}

【问题讨论】:

    标签: c++ visual-c++ visual-studio-2012


    【解决方案1】:

    好吧,您得到的链接器错误表明您从未提供过

    的定义
    void CateringOrder::calcTotals(void) {…}
    

    除此之外,写这样的东西:

    void Order::calcTotals(void) override;
    

    在类定义中是不合法的 C++。虽然这种非标准语法适用于 Visual C++ 编译器,但它只是出于兼容性原因而保留在那里。正确的版本是简单地写

    void calcTotals(void) override;
    

    【讨论】:

      猜你喜欢
      • 2012-09-04
      • 1970-01-01
      • 1970-01-01
      • 2016-06-02
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      相关资源
      最近更新 更多