我有这段代码:
namespace js0n
{
struct json
{
typedef int json_object;
json(){}
json(json_object const& other)
{
}
json& operator=(json_object const& other)
{
return *this;
}
};
typedef json::json_object json_object;
}
行js0n::json json(js0n::json_object());
给出了编译错误。
int main()
{
js0n::json json(js0n::json_object());
return 0;
}
请注意,我已经淘汰了大部分代码,因为它不对错误负责。我做错了什么?
错误消息:
test.cpp: In function 'int main()':
test.cpp:9:8: error: request for member 'parse' in 'json', which is of non-class type 'js0n::json(js0n::json_object (*)()) {aka js0n::json(int (*)())}'
赋值运算符即(json = json_object();
)工作得很好。
答案 0 :(得分:3)
你还没有说出编译错误是什么,但看起来你已经绊倒了most vexing parse:
js0n::json json(js0n::json_object());
这声明了一个函数。要声明局部变量,需要更多括号:
js0n::json json((js0n::json_object()));
^ ^
答案 1 :(得分:3)
js0n::json json(js0n::json_object());
欢迎来到most vexing parse。这声明了一个返回js0n::json
并获取js0n::json_object
参数的函数。要消除歧义,可以按照该问题的答案中的建议添加更多的parens,或者(因为您最初标记了此[c++11]
),使用list-initialization:
js0n::json json{js0n::json_object()};
或者
js0n::json json(js0n::json_object{});
或者
js0n::json json{js0n::json_object{}};
:)