2015-06-08 73 views
-1

我有一個簡單的問題,我一直無法找到答案。如何用函數外部的constructior聲明一個類C++

如果我有一個構造函數的類,例如,

class Test 
{ 
public: 
    Test(int var); 
    ~Test(); 
}; 

,我想聲明它的主要外,作爲一個靜態全局

例如。

static Test test1; 

int main() 
{ 
    return 0; 
} 

我會得到一個錯誤:如果我嘗試使用 static Test test1(50); 我會得到錯誤 no matching function for call to 'Test::Test()'

:未定義參考

什麼是做到這一點的正確方法?我是否需要2個構造函數,一個是空的,另一個是變量?

感謝,

+1

它試圖調用默認的構造函數,它確實不存在。您定義了一個接受整數的構造函數,因此您需要將整數傳遞給構造函數或定義不帶參數的構造函數。 – Coda17

+0

在你的程序中,一個不帶任何參數的構造函數會有用嗎? –

+0

對你更好不知道:'靜態測試測試(1);'(請避免它) –

回答

0

最有可能的,你必須爲你的類構造函數和析構函數的實現(即使是空的實現),例如:

class Test 
{ 
public: 
    Test() // constructor with no parameters, i.e. default ctor 
    { 
     // Do something 
    } 

    Test(int var) 
    // or maybe better: 
    // 
    // explicit Test(int var) 
    { 
     // Do something for initialization ... 
    } 

    // BTW: You may want to make the constructor with one int parameter 
    // explicit, to avoid automatic implicit conversions from ints. 

    ~Test() 
    { 
     // Do something for cleanup ... 
    } 
};