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;

谁能告诉我为什么我可以从静态 ::instance() 创建引用但不能将它用于任何事情?(如果我在第五行评论一切正常)

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 回答