make()我在类中有一个静态方法Response。它被重载以从 jsoncpp 获取std::string或Json::Value获取。
我重载了该方法,如下所示:
Response::make(Json::Value body)
{
...
}
Response::make(std::string body)
{
...
}
Run Code Online (Sandbox Code Playgroud)
这会导致编译时出现此错误:
Response::make(Json::Value body)
{
...
}
Response::make(std::string body)
{
...
}
Run Code Online (Sandbox Code Playgroud)
是否被Json::value视为字符串?我该如何解决这个问题?
根据错误消息,您正在将一个const char[33]数组(我假设是字符串文字?)传递给make(). 但是,您没有接受该类型的重载,因此编译器必须将其转换为您有重载的另一种类型。
但是, 和std::string都有JSON::Value一个接受 a const char*(aconst char[]衰减为)的构造函数,因此编译器不知道应该调用哪个重载,因此会出现错误。
所以,你有 2 个选择:
添加第三个重载,以 aconst char*作为输入:
Response::make(const char* body)
{
...
}
Response::make(Json::Value body)
{
...
}
Response::make(std::string body)
{
...
}
Run Code Online (Sandbox Code Playgroud)
在调用站点自己显式地进行所需的转换,例如:
Response::make(Json::Value("..."));
Run Code Online (Sandbox Code Playgroud)
Response::make(std::string("..."));
Run Code Online (Sandbox Code Playgroud)
或者,对于std::stringC++14 及更高版本:
using namespace std::literals;
Response::make("..."s);
Run Code Online (Sandbox Code Playgroud)