抽象类C ++(erorr LNK 2001:未解析的外部符号)

时间:2018-09-23 00:41:36

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

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

错误LNK2001:未解决的外部符号“公共:虚拟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;
}

1 个答案:

答案 0 :(得分:0)

好吧,您收到的链接器错误提示您从未提供

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

除此之外,编写如下内容:

void Order::calcTotals(void) override;
类定义中的

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

void calcTotals(void) override;