Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 纯抽象类中对方法的未定义引用_C++_Oop - Fatal编程技术网

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

C++ 纯抽象类中对方法的未定义引用,c++,oop,C++,Oop,但是,只有在实现方法Apartment::calculChirie()时才会出现这些错误。那么,为什么calculChirie方法的实现会影响其他虚拟方法呢?我该怎么做才能修复它呢?无论你是否在任何地方调用函数,拥有任何没有实体的非纯虚拟方法都是“格式错误,不需要诊断”。编译器可以给出警告或错误,但不必这样做 也许这里发生的事情是,编译器在没有虚拟方法体的情况下没有费心生成vtable;但是,一旦您添加了一个,它就会尝试生成vtable,而无法找到其他方法的主体 正如评论中提到的,实现这些方法是

但是,只有在实现方法Apartment::calculChirie()时才会出现这些错误。那么,为什么calculChirie方法的实现会影响其他虚拟方法呢?我该怎么做才能修复它呢?

无论你是否在任何地方调用函数,拥有任何没有实体的非纯虚拟方法都是“格式错误,不需要诊断”。编译器可以给出警告或错误,但不必这样做

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

正如评论中提到的,实现这些方法是一个很好的解决方案。

无论您是否在任何地方调用函数,都“格式错误,不需要诊断”。编译器可以给出警告或错误,但不必这样做

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


正如在评论中提到的,实现这些方法是一个很好的修复方法。

我应该怎么做才能修复它?
实现这些方法。@tkausl我不相信它有那么容易:))谢谢
我应该怎么做才能修复它?
实现这些方法。@tkausl我不相信它有那么容易:))谢谢
#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;

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