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

コンパイルエラーが何であるかはまだ言っていませんが、最も厄介な解析につまずいたようです。

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ます。曖昧さを解消するには、その質問への回答で提案されているように、さらに多くの親を追加するか、(最初にこれにタグを付けたので[c++11])list-initializationを使用します。

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

または

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

または

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

:)

于 2012-11-04T17:17:02.670 に答える