目前我正在一个GUI系统上,我已经由具有这种继承结构的GUIButton对象:C++指针模板类具有(虚拟)继承
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的类 - 这可能是我的问题的原因吗?
我确定我所有的功能都已经实现了,所以问题不应该在那里。
如果有人能给我一些指点,我会很感激!
注意*虚拟*继承是不同的东西;请参阅http://www.parashift.com/c++-faq-lite/multiple-inheritance.html。并改变你的问题标题! – 2010-11-11 16:28:07
GUIObject具有虚拟功能...是不是那么虚拟继承? – Tomas 2010-11-11 16:30:30
@Tomas虚拟功能意味着后期绑定。这与虚拟继承无关。 – 2010-11-11 16:31:36