Проблема реализации виртуального метода в производном классе - PullRequest
0 голосов
/ 23 сентября 2011

Привет, я пытался многократно наследовать чисто виртуальную функцию с использованием компилятора MVS2010. Таким образом, я могу запустить ничью для всех визуализируемых объектов.

Так вот диаграмма

в ASCII

|Renderable            | |Entity             |
|virtual bool draw()=0;| | functions in here |

    is - a              is - a


                Shape

Так что, кажется, я не унаследую чисто виртуальную функцию? и реализовать виртуальную функцию. Вот мой код.

// Renderable.h
#ifndef H_RENDERABLE_
#define H_RENDERABLE_
class Renderable
{
 public:
    virtual bool Draw() = 0;
};
#endif


 //Shapes.h
 #ifndef H_SHAPES_
 #define H_SHAPES_
 #include "Renderable.h"
 #include "Entity.h"
 class Shapes : public Entity, public Renderable
 {
 public:
     Shapes();
     ~Shapes();

 };


 #endif

 //shapes.cpp
 #include "Shapes.h"


 Shapes::Shapes()
 {
 }


 Shapes::~Shapes()
 {
 }


 virtual void Shapes::Draw()
 {
 }

Я пробовал несколько вещей, и это не работает, а также в Google.

Ответы [ 3 ]

1 голос
/ 23 сентября 2011

Во-первых, вам нужно снова объявить функцию рисования в вашем классе Shapes.Затем убедитесь, что он имеет ту же подпись, что и подпись, объявленная в классе Renderable.

//Shapes.h
 #ifndef H_SHAPES_
 #define H_SHAPES_
 #include "Renderable.h"
 #include "Entity.h"
 class Shapes : public Entity, public Renderable
 {
 public:
     Shapes();
     ~Shapes();

     virtual bool Draw();

 };


 #endif

 //shapes.cpp

bool Shapes::Draw()
{
}
0 голосов
/ 23 сентября 2011

Вам нужно объявить Draw в Shapes:

class Shapes : public Entity, public Renderable
{
  public:
    Shapes();
    ~Shapes();
    virtual void Draw(); 
};

Недостаточно просто определить его позже.

0 голосов
/ 23 сентября 2011

Ваши типы возврата не совпадают.Renderable::Draw возвращает bool, а вы Shapes::Draw возвращают void.Вся сигнатура функции (включая возвращаемые типы) должна совпадать, в противном случае функция в производном классе просто скрывает функцию в базовом классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...