#c #audio #constructor #rvalue #juce
#c #Аудио #конструктор #rvalue #juce
Вопрос:
Я создаю объект с именем «Clip», который загружает аудио из файла и сохраняет его в буфере, и будет выполнять анализ. Параметрами в конструкторе являются ссылки на строки, менеджер форматов JUCE и перечисление оконного метода, хранящиеся в другом объекте.
Я использую разделенный cpp и файл заголовка. При инициализации и rvalue я использовал список инициализации в конструкторе, только в файле cpp, который, как я видел, обычно рекомендуется.
Моя проблема в том, что Xcode показывает «Возвращаемый тип определения вне строки ‘Clip:: Clip’ отличается от того, что указано в объявлении» ошибка в верхней части определения конструктора в файле cpp. Странно то, что это появляется только иногда. Иногда компилятор вместо этого выдает ошибку «Ожидаемый неквалифицированный идентификатор». Иногда он вообще не показывает ошибки.
В чем здесь проблема? Я не использую никаких других аргументов в конструкторе в файле cpp по сравнению с файлом заголовка. Пожалуйста, помогите.
Файл Clip.h:
#pragma once
#include <iostream>
#include <JuceHeader.h>
class Clip
{
public:
Clip(std::string amp;filePath, std::string amp;fileName, juce::AudioFormatManager
amp;audioFormatManRef, juce::dsp::WindowingFunction<double>::WindowingMethod
amp;windowRef);
~Clip();
private:
std::string path, name;
int numSamples, numChannels, thisSampleRate;
juce::AudioBuffer<float>* audioBuffer;
juce::dsp::WindowingFunction<double>::WindowingMethod amp;windowMethodRef;
};
Clip.cpp файл:
#include "Clip.h"
// "Return type of out-of-line definition" error shows here
Clip::Clip(std::string amp;filePath, std::string amp;fileName, juce::AudioFormatManager
amp;audioFormatManRef, juce::dsp::WindowingFunction<double>::WindowingMethod amp;windowRef) :
path(filePath), name(fileName), windowMethodRef(windowRef)
{
std::cout << "Loading new clip...";
// Create file reader and load data into buffer
juce::File file(path);
juce::AudioFormatReader* formatReader = audioFormatManRef.createReaderFor(file);
numSamples = juce::roundToInt(formatReader->lengthInSamples);
numChannels = formatReader->numChannels;
audioBuffer->setSize(numChannels, numSamples);
formatReader->read(audioBuffer, 0, numSamples, 0, false, false);
}
Clip::~Clip()
{
delete audioBuffer;
}
Комментарии:
1. Xcode не является компилятором C . Только компилятор C может полностью понять код C . Для IDE нет ничего необычного в неправильном анализе сложного кода C . Ваш компилятор C компилирует приведенный выше код без каких-либо ошибок? Если да, то это последнее слово.
2. Что происходит после очистки? Shift command k