当我创建实现基类的虚函数的子类的对象时,出现此错误。



而我的代码是

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(){};



};

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

};

// child 类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;
}

最佳答案

好吧,收到的链接器错误提示您从未为以下内容提供定义:

void CateringOrder::calcTotals(void) {…}

除此之外,编写如下代码:
void Order::calcTotals(void) override;

类定义中的C++不合法。尽管此非标准语法可与Visual C++编译器一起使用,但仅出于兼容性原因而保留在该语法中。正确的版本是简单地写
void calcTotals(void) override;

关于c++ - 抽象类C++(错误LNK 2001: Unresolved external symbol ),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52462020/

10-11 23:03
查看更多