extern类变量导致编译器错误

时间:2013-05-27 13:01:36

标签: c++ class

我有一个包含这些定义的头文件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()创建一个引用但不能用于任何东西? (如果我在第五行评论一切正常)

1 个答案:

答案 0 :(得分: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;
}