2013-03-20 120 views
-2

我想實現的模板類myQueue中(邏輯結構爲環形緩衝區):爲什麼我得到錯誤c2512:沒有合適的默認構造函數可用?

// MyQueue.h 
#pragma once 
template<typename T> 
class MyQueue 
{ 
public: 
    /* interface */ 
    MyQueue(int sizeOfBuffer); 
    void push(const T& elem); 
    T pop(void); 

private: 
    T* m_array; 
}; 

template<typename T> 
MyQueue<T>::MyQueue(int sizeOfBuffer) 
{ 
    m_array = new T[sizeOfBuffer]; 
} 

通常當我在一個模板類面臨着實現一個構造函數的我實現它的聲明:

#pragma once 
template<typename T> 
class MyQueue 
{ 
public: 
    /* interface */ 
    MyQueue(int sizeOfBuffer){// do some actions with argument sizeOfBuffer}; 
    void push(const T& elem); 
    T pop(void); 

private: 
    T* m_array; 
}; 

由於構造函數的主體可以佔用很多空間,我決定除了聲明之外(但在相同的頭文件中)實現它以使代碼更具可讀性
問:什麼,我做錯了,如何解決我的問題?

+1

你在實例化的專業化中使用了什麼'T'? – 2013-03-20 21:09:53

+0

我正在使用int。 – 2013-03-20 21:10:55

+2

請出示完整的錯誤消息,並且還它使用代碼'myQueue中' – 2013-03-20 21:12:03

回答

3

這有沒有關係你怎麼寫你的構造體。

它與事實某處你顯然試圖創建該類的默認構造對象的事,但你有沒有提供一個默認的構造函數。通常情況下,編譯器會綜合一個默認構造函數,但是由於您已經編寫了一個接受參數的構造函數,因此編譯器也不會(自動)執行此操作。

隨着近來編譯器,你應該能夠得到使用= default;語法C++ 11引入合成的默認構造函數。否則,您需要明確寫出一個,或者向現有的構造函數添加一個默認參數(例如,MyQueue(int sizeOfBuffer = 20);)。

+0

中構造函數ommited參數的錯誤感謝您的迴應。問題是由於我試圖在沒有參數的情況下實例化T的對象。 – 2013-03-20 21:22:20

相關問題