C++ 类中的Typedef函数

C++ 类中的Typedef函数,c++,function,class,typedef,stdcall,C++,Function,Class,Typedef,Stdcall,我希望能够在类中使用typedef函数。但是我找不到一个方法来做到这一点。我需要扫描地址,以便无法硬编码,因为我需要像下面这样设置地址SetCursorPosFunction=(_SetCursorPos)(地址到函数) 例如: class Cursor { public: typedef BOOL(__stdcall *_SetCursorPos) (int X, int Y); _SetCursorPos SetCursorPosFunction; }; 我希望能够像下面

我希望能够在类中使用typedef函数。但是我找不到一个方法来做到这一点。我需要扫描地址,以便无法硬编码,因为我需要像下面这样设置地址
SetCursorPosFunction=(_SetCursorPos)(地址到函数)

例如:

class Cursor
{
public:

    typedef BOOL(__stdcall *_SetCursorPos) (int X, int Y);
    _SetCursorPos SetCursorPosFunction;
};
我希望能够像下面这样调用函数
Cursor::SetCursorPosFunction(x,y)

我的意思的例子

void Function()
{
    DWORD_PTR AddressToFunctionSetCourserPos = Find(....);
    Cursor::SetCursorPosFunction = (Cursor::_SetCursorPos)(AddressToFunctionSetCourserPos ); //In final version it is going to be in a separate function where i get all the functions i need (This find() function can not be looped or called often, it is going to create lag etc.).

    Cursor::SetCursorPosFunction(1, 1);

}
我得到了错误:

fatal error LNK1120: 1 unresolved externals
error LNK2001: unresolved external symbol "public: static int (__cdecl* Cursor::SetCursorPosFunction)(int,int)" (?SetCursorPosFunction@Cursor@@2P6AHHH@ZEA)

如果要模拟成员函数,则应在尝试使用游标之前创建游标的实例:

Cursor cursor;
cursor.SetCursorPosFunction(x, y);
您还可以向类中添加构造函数来初始化指针:

class Cursor
{
public:
    Cursor()
        : SetCursorPosFunction((_SetCursorPos) GetProcAddress(...))
    { }
    typedef BOOL(__stdcall *_SetCursorPos) (int X, int Y);
    const _SetCursorPos SetCursorPosFunction;
};

将函数修改为
静态
将允许您使用它,而无需根据需要先实例化成员:

class Cursor
{
public:
    typedef BOOL(__stdcall *_SetCursorPos) (int X, int Y);
    static _SetCursorPos SetCursorPosFunction;
};
Cursor::SetCursorPosFunction(x,y)
现在应该可以工作了(假设您先初始化它)


您还需要在全局空间中初始化静态成员。类似于
Cursor::_setcursorposcursor::SetCursorPosFunction=nullptr应该可以工作。但是要小心,只将其放在一个翻译单元中。

为什么不使用
静态
函数成员?您当前的方法有什么问题?@passway I可能无法设置地址并调用函数。您能显示您编写的特定代码和出现的错误吗?您想要静态成员吗?@passwayr查看更新的线程:)感谢您抽出时间回答问题。:)是的,就像我想要它,但我有一些错误。也许我把它初始化错了?有关错误消息,请参阅更新的线程。:)感谢您花时间回答以下问题:D@ILikeMyBallsWarm您需要初始化全局空间中的所有静态成员。我不喜欢这个关于C++的事实,但是你无论如何都要做。是的,这是我的问题:D谢谢:D祝你有个美好的一天,继续摇摆。PS.应该是Cursor::_setcursorposcursor::SetCursorPosFunction=nullptr;