可视抽象类 c++(错误 LNK 2001:未解析的外部符号)



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

错误 LNK2001:未解析的外部符号"公共:虚拟无效__thiscall餐饮订单::[订单]::计算总计(无效("(?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;
}

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

void CateringOrder::calcTotals(void) {…}

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

void Order::calcTotals(void) override;

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

void calcTotals(void) override;

最新更新