C ++静态声明

时间:2013-10-07 20:41:58

标签: c++ class static namespaces member

我试图在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â

我不知道为什么会这样做,甚至在哪里搞清楚。还有一点奇怪,编译器会说这不是你想的吗?

1 个答案:

答案 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;
};