0

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

我不知道为什么要这样做,甚至不知道在哪里解决。编译器会这样说你不觉得有点奇怪吗?

4

1 回答 1

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;
};
于 2013-10-07T20:49:04.257 回答