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

copy constructor strange compile error

本文关键字:编译 错误 构造函数 复制      更新时间:2023-10-16

我有此代码:

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();)工作正常。

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

欢迎进行最烦人的解析。这会声明返回js0n::json并采用js0n::json_object参数的函数。为了消除歧义,要么添加更多的parens,如该问题的答案中所建议的,要么(由于最初标记了此[c++11]),请使用列表限制:

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

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

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

:)

您尚未说过什么是汇编错误,但看起来您已经绊倒了最烦人的解析:

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

这会声明一个函数。要声明本地变量,您需要更多的括号:

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