为什么这样写就是编译通不过啊???stest.h
class stest
{
public:
stest();
~stest() {} static int m_nRef;
static vector<int> intarr;
};stest.cppint stest::m_nRef = 0;
stest::~stest()
{
if(--m_nRef == 0)
intarr.clear();
}
我把析构函数里的内容清空 就可以编译通过了(只要不在 cpp中用到 intarr 就可以编译通过)这是怎么回事啊???高手指教啊!!!
class stest
{
public:
stest();
~stest() {} static int m_nRef;
static vector<int> intarr;
};stest.cppint stest::m_nRef = 0;
stest::~stest()
{
if(--m_nRef == 0)
intarr.clear();
}
我把析构函数里的内容清空 就可以编译通过了(只要不在 cpp中用到 intarr 就可以编译通过)这是怎么回事啊???高手指教啊!!!
在cpp里最前面加上:
vector<int> stest::intarr;
不过应该是静态变量只能在静态方法中能够用的
java中是这样的
對於全域物件(如本例之GlobalObject),程式㆒開始,其建構式就先被執行
(比程式進入點更早);程式即將結束前其解構式被執行。MFC 程式就有這
樣㆒個全域物件,通常以 application object 稱呼之,你將在第6章看到它。
􀂄 對於區域物件,當物件誕生時,其建構式被執行;當程式流程將離開該物件的
存活範圍(以至於物件將毀滅),其解構式被執行。
􀂄 對於靜態(static)物件,當物件誕生時其建構式被執行;當程式將結束時(此
物件因而將遭致毀滅)其解構式才被執行,但比全域物件的解構式早㆒步執
行。
􀂄 對於以 new 方式產生出來的區域物件,當物件誕生時其建構式被執行。解構
式則在物件被delete 時執行
///以上是MFC深入浅出里的 第2章 C++ 的重要性質 生存期问题
􀂄 對於全域物件(如本例之GlobalObject),程式㆒開始,其建構式就先被執行
(比程式進入點更早);程式即將結束前其解構式被執行。MFC 程式就有這
樣㆒個全域物件,通常以 application object 稱呼之,你將在第6章看到它。
􀂄 對於區域物件,當物件誕生時,其建構式被執行;當程式流程將離開該物件的
存活範圍(以至於物件將毀滅),其解構式被執行。
􀂄 對於靜態(static)物件,當物件誕生時其建構式被執行;當程式將結束時(此
物件因而將遭致毀滅)其解構式才被執行,但比全域物件的解構式早㆒步執
行。
􀂄 對於以 new 方式產生出來的區域物件,當物件誕生時其建構式被執行。解構
式則在物件被delete 時執行(㆖例程式未示範)。
//以上是MFC 深入浅出中的话~
2. 静态变量intarr只有声明没有定义,应该加上.
...
int stest::m_nRef = 0;
vector<int> stest::intarr;
...