gpt4 book ai didi

c++ - 指向成员函数的指针映射:无法将 void (*) 转换为 void (Object::*)

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:20:25 24 4
gpt4 key购买 nike

尝试将函数添加到指向成员函数映射的指针时出现错误。

#include <map>
#include <utility>

class Server {
protected:
typedef void (*ScriptFunction)(std::pair<std::string, std::string>);
std::map<std::string, ScriptFunction> internalScriptMap;
void checkUserLogin(std::pair<std::string, std::string> packet) {}
void handleUserCommand(std::pair<std::string, std::string> packet) {}

public:
void setupServerInternalCommands() {
internalScriptMap["login"] = &Server::checkUserLogin;
internalScriptMap["clientcmd"] = &Server::handleUserCommand;
}
};

CodePad 说(http://codepad.org/JZHeJSPz):

t.cpp: In member function 'void Server::setupServerInternalCommands()':
Line 13: error: cannot convert 'void (Server::*)(std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >)' to 'void (*)(std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >)' in assignment
compilation terminated due to -Wfatal-errors.

我不明白为什么我的代码不想编译,为什么编译器不能将 'void (*)' 转换为 'void (Server::*)'。

感谢您的帮助!

最佳答案

你应该使用:-

typedef void (Server::*ScriptFunction)(std::pair<std::string, std::string>);

即指向成员函数的指针而不是指向函数的指针。

关于c++ - 指向成员函数的指针映射:无法将 void (*) 转换为 void (Object::*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27154671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com