我试图在console.h中声明一个静态变量,并在console.cpp中定义它。调用变量的行是:
ok = CheckIoEditMinMax(0,Console::_tabsize, curpos, 0, insert,
20-Console::_tabsize,20, offset) && ok;
我知道能够通过它,但编译器不喜欢我这样做的方式。例如,我已经声明了这样:
/*Edited*/
namespace cio{
class Console{
public:
static unsigned int _tabsize; //Under public so it can be reached by the main.
//inside the console class in cio namespace
};
}
然后在cpp文件中定义如下:
/*Edited - Also No it is not Const */
namespace cio{
unsigned int Console::_tabsize = 4;
}
但编译器仍然不喜欢这样,并且这样说:
console.cpp:8:32: error: âunsigned int cio::Console::_tabsizeâ is not a
static member of âclass cio::Consoleâ
我不知道为什么会这样做,甚至在哪里搞清楚。还有一点奇怪,编译器会说这不是你想的吗?
答案 0 :(得分:2)
只有成员变量的声明需要包含static
说明符。
struct Foo
{
static int value_;
};
// static specifier cannot be used here.
int Foo::value_ = 1;
在这种情况下,如果_tabsize
没有更改,您可以将其声明为const
并在类定义中为其指定值。如果不这样做,则无需提供定义。
struct Foo
{
static const int value_ = 1;
};