带有(虚拟)继承的C ++指向模板类的指针

时间:2010-11-11 16:20:50

标签: c++ templates inheritance callback

目前我正在开发一个GUI系统,我已经创建了一个具有这种继承结构的GUIButton对象:

GUIObject
    |
GUIImage
    |
GUIButton

其中GUIObject是一个带有一些虚函数的基类(渲染,更新等)。

无论如何,由于我想要处理GUI系统的回调,GUIButton是一个模板类,其中T是具有应该被回调的方法的对象。

这是头文件:

 #include "GUIImage.h"

template<class CallbackClass> 
class GUIButton : public GUIImage
{
public:

    // Constructor //
    GUIButton();

    // GUIObject Overides //

    bool update(const GUIUpdateInfo& updateInfo);
    void update();

    void render(const GUIRenderInfo& renderInfo);

    string getType();

    // Callback //

    void setCallback(void (CallbackClass::* callback)(), CallbackClass* instance);

    // Destructor //
    ~GUIButton();

private:

    void (CallbackClass::*  m_callback)();
    CallbackClass*          m_callTo; 
};

你可以看到它们也是函数setCallBack,它从CallbackClass和要使用的特定实例设置方法。

无论如何,在所有这些之后,我的代码编译得很好,但是当我尝试使用新类时,我得到以下链接错误:

    Undefined symbols:
  "GUIButton<GUIAppTest>::GUIButton()", referenced from:
      GUIAppTest::GUIAppTest()in GUIAppTest.o
      GUIAppTest::GUIAppTest()in GUIAppTest.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

我正在使用Xcode作为IDE,因此错误格式可能与正常情况略有不同。

使用该类的代码如下:

GUIButton<GUIAppTest>* newButton = new GUIButton<GUIAppTest>();

newButton->loadImage("Data/Sketch.png", 1);
newButton->setTextureCoordinates(0.0, 0.0, 1.0, 1.0);
newButton->setLocationCoordinates(0.0, 0.0, 84, 84);

newButton->setCallback(&GUIAppTest::onClick, this);

m_objects.push_back(newButton);

问题可能很简单,但我已经在这里呆了一段时间,所以我想我也可以得到一些帮助。 GUIButton的使用实际上发生在GUIAppTest的实现中 - 作为模板传递给GUIButton的类 - 这可能是我问题的原因吗?

我确信我的所有功能都已实现,所以问题不应该在那里。

如果有人能给我一些指示,我会非常感激!

2 个答案:

答案 0 :(得分:1)

定义构造函数

template<class CallbackClass>  
class GUIButton : public GUIImage 
{ 
public: 

    // Constructor // 
    GUIButton() : m_callTo(), m_callback() {} // <---- here 

答案 1 :(得分:0)

您的错误消息说明了一切:

  

未定义的符号:“GUIButton :: GUIButton()”,引自:...

您已声明但未定义GUIButton的构造函数。