我有點困惑,因爲GCC與消息C++因爲沒有匹配的函數調用基類的方法從
error: no matching function for call to ...
note: candidates are ...
所以我做了一個錯誤的函數調用下降一個錯誤,因爲它似乎是。以下是我真正從GCC有:
src/Services/UserService/UserService.cpp:17: error: no matching function for call to ‘Services::UserService::UserService::registerMethod(const char [6], Services::UserService::Request::LoginRequest* (Services::UserService::UserService::*)(std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Lib::request::Param, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Lib::request::Param> > >&))’
src/Services/UserService/../../Lib/Service/Service.hpp:47: note: candidates are: void Lib::service::Service::registerMethod(std::string, Lib::request::Request* (Lib::service::Service::*)(std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Lib::request::Param, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Lib::request::Param> > >&))
我有一個基類庫::服務::服務由服務:: UserService :: UserService的。 我做了另外一個基類庫::支持::請求這是由服務:: UserService ::支持:: LoginRequest
的基類庫::衍生服務::服務實現了一個調用的方法「registerMethod」,它接受一個字符串和一個函數指針。
typedef Lib::request::Request* (Lib::service::Service::*FuncPtr)(map<string, Param>&);
...
void registerMethod(string MethodName, FuncPtr Func);
因此,格式化GCC outbut一點給了我這樣的:
要求是:
Services::UserService::UserService::registerMethod(
const char [6],
Services::UserService::Request::LoginRequest* (
Services::UserService::UserService::*
)(
std::map<
std::basic_string<char, std::char_traits<char>, std::allocator<char> >,
Lib::request::Param,
std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,
std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Lib::request::Param> >
>&
)
)
和GCC說,一個(且只有一個 - 那就是我想要)應聘者:
void
Lib::service::Service::registerMethod(
std::string,
Lib::request::Request* (
Lib::service::Service::*
)(
std::map<
std::basic_string<char, std::char_traits<char>, std::allocator<char> >,
Lib::request::Param,
std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,
std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Lib::request::Param> >
>&
)
)
因此,由於Services :: UserService :: UserService是從Lib :: service :: Service 0123派生的和Serices :: UserService :: Request :: LoginRequest是從Lib :: request :: Request派生的我以爲這是工作的,因爲我定義了匹配基類的函數,因此也可以在派生類中使用它們。
我在哪裏錯了?如果這有幫助,這裏是一些更多的代碼;-)
到目前爲止感謝!
最好的問候,
塞巴斯蒂安
namespace Lib {
namespace service {
class Service;
}
}
namespace Lib {
namespace request {
class Request {
public:
Request(Lib::service::Service *Owner);
virtual ~Request();
virtual void Execute() = 0;
void join(Lib::Session::Session *session);
protected:
Lib::service::Service *module;
Lib::Session::Session *session;
map<string, Param> params;
private:
};
}
}
typedef Lib::request::Request* (Lib::service::Service::*FuncPtr)(map<string, Param>&);
namespace Lib {
namespace service {
class Service {
public:
const string Name;
Service();
virtual ~Service();
Request* Call(string MethodName, map<string, Param> &Params);
protected:
void registerMethod(string MethodName, FuncPtr Func);
private:
map<string, FuncPtr> methods;
};
}
}
-
-
namespace Services {
namespace UserService {
class UserService : public Lib::service::Service {
public:
const string Name;
UserService();
virtual ~UserService();
LoginRequest* Login(map<string, Param> ¶ms);
LogoutRequest* Logout(map<string, Param> ¶ms);
private:
};
}
}
-
namespace Services
{
namespace UserService
{
UserService::UserService() : Name("UserModule")
{
this->registerMethod("Login", &UserService::Login);
this->registerMethod("Logout", &UserService::Logout);
}
UserService::~UserService()
{
}
LoginRequest* UserService::Login(map<string, Param> ¶ms)
{
LoginRequest *request = new LoginRequest(this);
//...
return request;
}
LogoutRequest* UserService::Logout(map<string, Param> ¶ms)
{
LogoutRequest *request = new LogoutRequest(this);
//...
return request;
}
}
}
這只是太多的代碼。你能不能創建一個小例子來展示你的問題?在您完成一個小例子時,您可能會發現問題的根本原因。 –
我不會穿過所有的代碼。錯誤消息告訴你什麼是錯的。標有「不匹配呼叫...」的部分告訴你呼叫代碼在做什麼。標有「候選人是......」的部分告訴你看到了哪些重載。它無法在它們之間進行選擇。 –
@PeteBecker:這就是所謂的SO聲望點的問題。缺乏任何努力的問題仍然會得到解答。希望每個問題都有一個凍結計量器。只有符合一些基本標準(*努力或清晰度*),Q才能被回答。除非提問者修改足夠制定基本標準,Q無法回答,一旦完成就解凍解凍。 –