0

これらの定義を含むヘッダー ファイル head.hh があります (シングルトン パターンを実装しようとしています)。

#ifndef HEAD_HH
#define HEAD_HH

class X
{
private:
  X() : i(0) {}

public:
  static X &instance()
  {
    static X x;
    return x;
  }

  int i;

};

#endif

私の実装 impl.cc は次のようになります。

#include "head.hh"

X &iks = X::instance();

iks.i = 17;

int main(int argc, char **argv)
{
  return 0;
}

このコードは正しいと思いますが、コンパイラ エラーが発生します (g++ を使用)

impl.cc:5:1: error: ‘iks’ does not name a type
 iks.i = 17;

static ::instance() から参照を作成できるのに、それを何にも使用できない理由を誰か教えてもらえますか? (5 行目にコメントすると、すべて正常に動作します)

4

1 に答える 1

0

割り当てをグローバル スコープに置くことはできません。たとえば、関数の一部である必要があります。

// ...

iks.i = 17; // ERROR! Assignment not in the scope of a function

int main(int argc, char **argv)
{
    iks.i = 17;
//  ^^^^^^^^^^^ This is OK, we're inside a function body
    return 0;
}
于 2013-05-27T13:03:40.367 に答える