代码之家  ›  专栏  ›  技术社区  ›  Tomas

使用(虚)继承的模板类的C++指针

  •  0
  • Tomas  · 技术社区  · 14 年前

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

    GUIObject
        |
    GUIImage
        |
    GUIButton
    

    其中,guiObject是带有一些虚拟函数(render、update等)的基类。

    无论如何,由于我想处理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,它从回调类和要使用的特定实例中设置方法。

    不管怎样,在所有这些之后,我的代码编译得很好,但是当我尝试使用新类时,我得到了以下链接错误:

        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 回复  |  直到 14 年前
        1
  •  1
  •   Alexey Malistov    14 年前

    定义构造函数

    template<class CallbackClass>  
    class GUIButton : public GUIImage 
    { 
    public: 
    
        // Constructor // 
        GUIButton() : m_callTo(), m_callback() {} // <---- here 
    
        2
  •  0
  •   André Caron    14 年前

    您的错误消息将全部显示:

    未定义的符号:“guibutton::guibutton()”,引用自:…

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