我有一个包含这些定义的头文件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()创建一个引用,但不能用它做任何事情?(如果我在第五行添加注释,则一切正常)
发布于 2013-05-27 21:03:40
不能将分配放在全局作用域中。它必须是函数的一部分,例如:
// ...
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;
}https://stackoverflow.com/questions/16773830
复制相似问题