我有一个名为DrawerApp
的类,其中包含这些函数
_genericLoadFromFile
,Run
我想从下面的_loadFromFileHelper
函数中调用每个函数_loadFromBinHelper
,Run
:
void DrawerApp::Run()
{
_genericLoadFromFile(_loadFromFileHelper);
_genericLoadFromFile(_loadFromBinHelper);
}
_genericLoadFromFile
看起来像这样:
bool DrawerApp::_genericLoadFromFile(static bool (DrawerApp::*helperFunc)(string))
{
/* do some stuff */
string fileName = 'Test';
success = (this->*helperFunc)(fileName);
}
但不幸的是我收到以下错误:
DrawerApp::_loadFromFileHelper': function call missing argument list;
use '&DrawerApp::_loadFromFileHelper' to create a pointer to member
还有这个警告:
Warning 1 warning C4042: 'helperFunc' : has bad storage class
如何正确执行此操作?我不知道我做错了什么。 谢谢
修改
当我尝试编辑它时,错误建议&DrawerApp::_loadFromFileHelper
我收到另一个错误:
Error 2 error LNK2019: unresolved external symbol "private: bool __thiscall DrawerApp::_loadFromFileHelper(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?_loadFromFileHelper@DrawerApp@@AAE_NV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "private: void __thiscall DrawerApp::Run(void)" (?Run@DrawerApp@@AAEXXZ)
和
Error 3 error LNK1120: 1 unresolved externals
答案 0 :(得分:0)
这个问题非常愚蠢。我没有正确实现这些方法(忘了把DrawerApp::
放在他们面前。
抱歉弄乱你的头: - )
答案 1 :(得分:0)
假设辅助函数被声明为static,则不需要将它们作为成员函数指针调用 - 它们只能被称为普通函数指针,例如:尝试这个完整,可编译和可链接(虽然不是非常实用)的例子:
#include <string>
using namespace std;
class DrawerApp {
public:
void Run()
{
_genericLoadFromFile(_loadFromFileHelper);
_genericLoadFromFile(_loadFromBinHelper);
}
static bool _loadFromFileHelper(string x)
{
return true;
}
static bool _loadFromBinHelper(string x)
{
return true;
}
bool _genericLoadFromFile(
bool (*helperFunc)(string))
{
/* do some stuff */
string fileName = "Test";
bool success = (*helperFunc)(fileName);
return success;
}
};
int main () {
DrawerApp a;
a.Run();
return 0;
}
这也表明没有必要在_genericLoadFromFile()
的函数定义中显示存储类。