目前我正在开发一个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的类 - 这可能是我问题的原因吗?
我确信我的所有功能都已实现,所以问题不应该在那里。
如果有人能给我一些指示,我会非常感激!
答案 0 :(得分:1)
定义构造函数
template<class CallbackClass>
class GUIButton : public GUIImage
{
public:
// Constructor //
GUIButton() : m_callTo(), m_callback() {} // <---- here
答案 1 :(得分:0)
您的错误消息说明了一切:
未定义的符号:“GUIButton :: GUIButton()”,引自:...
您已声明但未定义GUIButton
的构造函数。