2013-08-21 46 views
0

我想使用一個開源的類,它的.h文件中開頭:錯誤:預期型

template <class DT> 
class FFTReal 
{ 
public: 
enum {   MAX_BIT_DEPTH = 30 }; 
typedef DT DataType; 
explicit   FFTReal (long length); 
... 

我第一次在我的我的類的私有部分創建的指針類:

ffft::FFTReal<double> *m_fft_object; 

然後,一個初始化函數內,與

m_fft_object = new fft_object((long)(FFTWindowSize)); 

正是在這樣的最後一行,我得到了創建它錯誤「錯誤:預期類型」。 我已經做了一些搜索的錯誤,但似乎沒有匹配我的特定問題。

感謝

回答

4

這大概是因爲fft_object不是一個類型。您可能認爲是這樣的:

m_fft_object = new ffft::FFTReal<double>(static_cast<long>(FFTWindowSize)); 

我也改正了C風格演員給你。

如註釋中所述,除非有很好的理由,否則應該避免使用原始指針來存儲對象數據。如果數據應該爲空,則考慮使用智能指針(std::unique_ptr<ffft::FFTReal<double>>),否則可以簡單地將對象實例存儲爲值(ffft::FFTReal<double>)。這兩個選項都會使內存泄漏的可能性極小,而在使用new和原始指針時,必須非常小心地在完成時刪除分配的對象。

+1

我懷疑people * ever *意思是使用'operator new',而不是初始化智能指針。 – pyon

+0

@EduardoLeón同意,智能指針會更好。或者,如果變量不需要處於未設置狀態,則使用值('ffft :: FFTReal ')而不是指針('ffft :: FFTReal *')會更好。 – cdhowie

+0

比你@cdhowie的解決方案。它解決了我的問題。關於避免使用對象的原始指針的評論。在我的實現中,我爲庫類創建了一個包裝函數,這是我認爲我可以做到的唯一方法,即在我的私人部分創建一個指向庫類的指針,並添加一些初始化函數(在這種情況下分配)並使用該功能。你能否提出一個更好的方法來組織這樣的代碼?謝謝 – XAnguera