2013-10-07 177 views
0

我想在console.h中聲明一個靜態變量並在console.cpp中定義它。調用變量的行是:C++靜態聲明

 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

在你的代碼中放上更多的上下文。這個類,名稱空間等等。 – Rod

+0

那麼,編譯器清楚地說'_tabesize'不是成員,也許有理由呢? –

+0

嘗試刪除cpp中的'static',只是「unsigned int Console :: _tabize = 4;」。此外,請確保tabize是類控制檯的一個字段(我認爲控制檯是一個類;如果它是一個命名空間,請嘗試「命名空間控制檯{unsigned int Console :: _tabsize = 4;}」cpp –

回答

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; 
}; 
+0

它不是一個const –