1

我有这个代码:

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 (*)())}'

赋值运算符 ie ( json = json_object();) 工作得很好。

4

2 回答 2

3

你还没有说编译错误是什么,但看起来你已经绊倒了最令人头疼的 parse

js0n::json json(js0n::json_object());

这声明了一个函数。要声明一个局部变量,你需要更多的括号:

js0n::json json((js0n::json_object()));
                ^                   ^
于 2012-11-04T17:14:07.400 回答
3

js0n::json json(js0n::json_object());

欢迎来到最令人头疼的解析。这声明了一个返回js0n::json并接受js0n::json_object参数的函数。要消除歧义,请按照该问题的答案中的建议添加更多括号,或者(因为您最初标记了 this [c++11]),使用列表初始化:

js0n::json json{js0n::json_object()};

或者

js0n::json json(js0n::json_object{});

或者

js0n::json json{js0n::json_object{}};

:)

于 2012-11-04T17:17:02.670 回答