对纯抽象类中方法的未定义引用

Undefined reference to a method in a pure abstract class

本文关键字:未定义 引用 方法 抽象类      更新时间:2023-10-16
#include <iostream>
#include <string>
#include <vector>
#include <utility>
#include <set>
class Locuinta {
protected:
std::string numeClient;
double pret;
int suprafata;
int discount;
public:
virtual double calculChirie() const = 0;
virtual void citire() = 0;
virtual void afisare() = 0;
};
class Apartament : public Locuinta {
int etaj;
public:
double calculChirie() const;
void citire();
void afisare();
};
double Apartament::calculChirie() const {
double chirie = 0;
chirie = suprafata * pret;
if (discount != 0) {
chirie *= (discount * 0.01);
}
return chirie;
}

我有这两个班级洛昆塔和公寓。Locuinta 类中有三种抽象方法:calculChirie((、citire(( 和 afisare((。运行代码时,出现以下错误:

undefined reference to `Apartament::citire()
undefined reference to Apartament::afisare()
error: ld returned 1 exit status

但是,如果我实现方法Apartament::calculChirie((,我只会收到这些错误。那么,为什么方法演算的实现会影响其他虚方法呢?我应该怎么做才能解决它?

任何没有主体的非纯虚拟方法都是"格式不正确,不需要诊断",无论你是否真的在任何地方调用函数。 允许编译器发出警告或错误,但不必这样做。

也许这里发生的事情是,在没有虚拟方法主体的情况下,编译器没有费心生成 vtable;但是一旦你添加一个,它就会尝试生成 vtable,但找不到其他方法的主体。

如评论中所述,实现这些方法是一个很好的解决方法。