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));

「Error:expected a type」というエラーが表示されるのは、この最後の行です。エラーを検索しましたが、特定の問題に一致するものはないようです。

ありがとう

4

1 に答える 1

4

おそらく、これはfft_object型ではないためです。あなたはおそらくこれを意味しました:

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

C スタイルのキャストも修正しました。

コメントに記載されているように、非常に正当な理由がない限り、生のポインターを使用してオブジェクト データを格納することは避ける必要があります。データを null 許容にする必要がある場合は、スマート ポインター ( ) の使用を検討してくださいstd::unique_ptr<ffft::FFTReal<double>>。それ以外の場合は、オブジェクト インスタンスを値として格納するだけです ( ffft::FFTReal<double>)。どちらのオプションでも、メモリ リークが発生する可能性は非常に低くnewなりますが、未加工のポインタを使用する場合は、割り当てられたオブジェクトを使い終わったときに削除するように細心の注意を払う必要があります。

于 2013-08-21T22:31:26.323 に答える