Возвращает тип ошибки определения вне строки со списком инициализации конструктора в заголовочном файле C

#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