В настоящее время я работаю в системе с графическим интерфейсом и создал объект GUIButton, который имеет такую структуру наследования:
GUIObject
|
GUIImage
|
GUIButton
Где GUIObject - это базовый класс с некоторыми виртуальными функциями (render, updateи т. д.).
В любом случае, из-за способа обработки обратных вызовов для системы с графическим интерфейсом 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 - Может ли это быть причиной моей проблемы?
Я уверен, что все мои функции были реализованытакже проблема не должна лежать там.
Если бы кто-нибудь мог дать мне несколько советов, я был бы очень признателен!