Visual Studio中的干净重建使整个过程发挥作用。
-
在Visual Studio MFC项目中,我正在创建一个类来管理按钮。
这是我的问题:我需要在运行时添加Click Handler,这样我才能使用Message Map。所以我在我的类中有一个clickHandler函数指针,用于注册click处理程序。这对全局函数来说没问题,但我想使用类成员作为ClickHandlers。
经过大量搜索,我找到了这个功能:
class NRButton : public CButton
{
...
template<class Type>
inline void SetClickHandler(
void (*cb)(CObject * , void (CObject::*)()),
Type * pt,
void (Type::*fn)()
)
{
callbackHandler = cb;
objectHandler = pt;
clickHandler = fn;
}
...
}
如您所见,此函数是内联实现的,但是当我构建项目时,我发现了此链接器错误:
FenetreParametrage.obj : error LNK2019: symbole externe non résolu "public: void __thiscall NRButton::SetClickHandler<class FenetreParametrage>(void (__cdecl*)(class CObject *,void (__thiscall CObject::*)(void)),class FenetreParametrage *,void (__thiscall FenetreParametrage::*)(void))" (??$SetClickHandler@VFenetreParametrage@@@NRButton@@QAEXP6AXPAVCObject@@P81@AEXXZ@ZPAVFenetreParametrage@@P82@AEXXZ@Z) référencé dans la fonction "public: virtual int __thiscall FenetreParametrage::OnInitDialog(void)" (?OnInitDialog@FenetreParametrage@@UAEHXZ)
清除错误信息后,我得到了:
FenetreParametrage.obj : error LNK2019: symbole externe non résolu "
public: void __thiscall NRButton::SetClickHandler<class FenetreParametrage>(
void (__cdecl*)(class CObject *,void (__thiscall CObject::*)(void)),
class FenetreParametrage *,
void (__thiscall FenetreParametrage::*)(void)
)
"
référencé dans la fonction "
public: virtual int __thiscall FenetreParametrage::OnInitDialog(void)
"
我理解这条错误消息,但我不明白它出现的原因,我的函数是内联声明的,那么为什么VS Compiler无法找到它的实现呢?
感谢您的帮助
编辑:
这是对函数的调用:
bouton->SetClickHandler(
&FenetreParametrage::Callback,
this,
&FenetreParametrage::OnBoutonClick
);