c++ - 纯虚函数和三杠杆继承

标签 c++ g++

我在头文件中定义了三个类:

组织.h:

#ifndef Organizm_H
#define Organizm_H

class Organizm {
    public:
        int sila;
        int inicjatywa;
        int trup;

        virtual void akcja() = 0;
        virtual void kolizja() = 0;
        virtual void rysowanie() = 0;
};

#endif

Zwierze.h:

#include "config.h"
#include "Organizm.h"

#ifndef Zwierze_H
#define Zwierze_H

class Zwierze : public Organizm {
    public: 
        void akcja(int *, int *);
        void kolizja(Organizm *);
};

#endif

还有威尔克.h:

#include "Zwierze.h"

#ifndef Wilk_H 
#define Wilk_H

class Wilk: public Zwierze {
    public:
        Wilk();
        void rysowanie();
};

#endif

所有非虚方法都定义在相应的文件中:Organizm.cpp, Zwierze.cpp Wilk.cpp

但是在编译时出现以下错误消息:

g++    -c -o main.o main.cpp
main.cpp: In function ‘int main()’:
main.cpp:13:16: error: cannot allocate an object of abstract type ‘Wilk’
  w1 = new Wilk();
                ^
In file included from main.cpp:5:0:
Wilk.h:6:7: note:   because the following virtual functions are pure within ‘Wilk’:
 class Wilk: public Zwierze {
       ^
In file included from Swiat.h:2:0,
                 from main.cpp:3:
Organizm.h:11:16: note:         virtual void Organizm::akcja()
   virtual void akcja() = 0;
                ^
Organizm.h:12:16: note:         virtual void Organizm::kolizja()
   virtual void kolizja() = 0;
                ^
<wbudowane>: polecenia dla obiektu 'main.o' nie powiodły się
make: *** [main.o] Błąd 1
zsh: exit 2     make

我做错了什么,我该如何解决?

最佳答案

void akcja(int *, int *) 不同于 void akcja()(重载)。您无需在任何地方定义 void akcja()

关于c++ - 纯虚函数和三杠杆继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23249520/

相关文章:

C++ 缩短 wchar_t 数组

python - 想要检测图像的模糊,但无法正确处理

c++ - 在 C++ 中对多维数组进行排序

c++ - 为文件 block 生成 SHA1 哈希

c++ - OS X Yosemite的SciTe-错误: cannot be used within an App Sandbox

linux - Hello World C++ 内核模块中的 undefined symbol

c++ - 如何用强盗转换这个类型列表?

c++ - Distcc 与 C++ undefined reference

c++ - 禁用 "temporary to non-const reference"错误的 G++ 标志

c++ - 最小的 C++ STL vector 实现问题