复制构造函数奇怪编译错误

时间:2012-11-04 17:12:07

标签: c++

我有这段代码:

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();)工作得很好。

2 个答案:

答案 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{}};

:)