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