2013-08-21 3 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

Я сомневаюсь, что люди всегда будут использовать 'operator new', кроме как инициализировать интеллектуальные указатели. – pyon

+0

@ EduardoLeón Согласен, умный указатель будет лучше. Или, если переменная никогда не должна находиться в состоянии, отличном от заданного, использование значения ('ffft :: FFTReal ') вместо указателя ('ffft :: FFTReal *') было бы еще лучше. – cdhowie

+0

Чем вы @cdhowie для решения. Это решило мою проблему. Относительно вашего комментария об исключении использования необработанного указателя на объект. В моей реализации я создаю функцию-оболочку для класса библиотеки, и это единственный способ, по-моему, я мог это сделать, то есть создать указатель на класс библиотеки в моем частном разделе и добавить некоторые функции, которые инициализируют (в этом случае выделяют) и используйте функцию. Не могли бы вы предложить лучший способ организовать такой код? спасибо – XAnguera

Смежные вопросы