当我创建实现基类的虚函数的子类的对象时,出现此错误。
错误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;
}
答案 0 :(得分:0)
好吧,您收到的链接器错误提示您从未提供
的定义。void CateringOrder::calcTotals(void) {…}
除此之外,编写如下内容:
void Order::calcTotals(void) override;
类定义中的不是合法的C ++。尽管此非标准语法可与Visual C ++编译器一起使用,但仅出于兼容性原因而保留在该语法中。正确的版本应该是简单地写
void calcTotals(void) override;