我有這樣的父類:爲什麼在父類中聲明虛函數時會出現無法解析的外部錯誤?
enum UI_STATE
{
UI_STATE_SPLASH_SCREEN,
UI_STATE_LOGIN_SCREEN,
UI_STATE_CHARACTER_CREATION_SCREEN,
UI_STATE_CHARACTER_CHOOSE_SCREEN,
UI_STATE_LOADING_SCREEN,
UI_STATE_GAMEPLAY,
UI_STATE_EXIT_REQUESTED,
UI_STATE_UNKNOWN
};
[event_source(native)]
class UserInterface
{
protected:
MyGUI::Gui *mGUI;
public:
static UserInterface *Instance;
UI_STATE UI_CURRENT_STATE;
public:
UserInterface()
{
MyGUI::OgrePlatform* mPlatform = new MyGUI::OgrePlatform();
mPlatform->initialise(BaseObjects::mWindow, BaseObjects::mSceneMgr);
mGUI = new MyGUI::Gui();
mGUI->initialise();
UI_CURRENT_STATE = UI_STATE_UNKNOWN;
}
~UserInterface()
{
mGUI->destroyAllChildWidget();
mGUI->shutdown();
delete mGUI;
mGUI = NULL;
delete Instance;
Instance = NULL;
}
virtual void update();
virtual void GAMEPLAY_SCREEN_ShowTargetBox();
virtual void GAMEPLAY_SCREEN_HideTargetBox();
...//some other methods
}
UserInterface *UserInterface::Instance = NULL;
也有兩個子類,其中之一就是覆蓋這3個虛函數和第二什麼都不做這個3種功能。
兒童1:
#ifndef GameplayScreenInterface_h
#define GameplayScreenInterface_h
#include "UserInterface.h"
#include "ControllableCharacterAdv.h"
class GameplayScreenUserInterface : public UserInterface
{
private:
...
public:
GameplayScreenUserInterface()
{
...
}
void GAMEPLAY_SCREEN_ShowTargetBox()
{
...
}
void GAMEPLAY_SCREEN_HideTargetBox()
{
...
}
void update()
{
UpdateTargetBox();
UpdateCharacterBox();
}
void UpdateCharacterBox()
{
...
}
void UpdateTargetBox()
{
if (...)
{
if (...)
{
...
}
else if (...)
{
...
}
else
{
...
}
}
else
GAMEPLAY_SCREEN_HideTargetBox();
}
};
#endif GameplayScreenInterface_h
和2兒童:
#ifndef LoginScreenInterface_h
#define LoginScreenInterface_h
#include "UserInterface.h"
#include "NetworkManager.h"
class LoginScreenUserInterface : public UserInterface
{
public:
LoginScreenUserInterface()
{
...
}
};
#endif LoginScreenInterface_h
和編譯錯誤:(
Error 9 error LNK1120: 3 unresolved externals
Error 8 error LNK2001: unresolved external symbol "public: virtual void __thiscall UserInterface::GAMEPLAY_SCREEN_HideTargetBox(void)" ([email protected]@@UAEXXZ)
Error 7 error LNK2001: unresolved external symbol "public: virtual void __thiscall UserInterface::GAMEPLAY_SCREEN_ShowTargetBox(void)" ([email protected]@@UAEXXZ)
Error 6 error LNK2001: unresolved external symbol "public: virtual void __thiscall UserInterface::update(void)" ([email protected]@@UAEXXZ)
任何人有任何想法如何擺脫的錯誤?
謝謝,用void UserInterface :: update(){}幫助我! – Kosmos 2012-07-12 13:08:27
你應該補充說後者不適用於純虛擬析構函數,它們應該總是有一個正文。 – 2014-10-13 23:31:54