Инициализация AudioDeviceManager в приложении JUCE Audio

Я пытаюсь инициализировать экземпляр AudioDeviceManager в конструкторе моего MainContentComponent:

MainContentComponent(): deviceManager (getSharedAudioDeviceManager())

куда

  AudioDeviceManager& getSharedAudioDeviceManager()  
     {  

 if (sharedAudioDeviceManager == nullptr)

    {
        sharedAudioDeviceManager = new AudioDeviceManager();
        sharedAudioDeviceManager->initialise (2, 2, 0, true, String::empty, 0);
    }

    return *sharedAudioDeviceManager;
} 

и мои декларации будут:

AudioDeviceManager& deviceManager; static ScopedPointer<AudioDeviceManager> sharedAudioDeviceManager;

Ошибок компиляции нет, но есть ошибки времени выполнения, при этом компилятор говорит мне:

Undefined symbols for architecture x86_64: "MainContentComponent::sharedAudioDeviceManager", referenced from: MainContentComponent::getSharedAudioDeviceManager() in MainComponent.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

Полностью потерян. Помощь!


person Rithesh    schedule 01.09.2015    source источник


Ответы (1)


Вам нужно определить свой статический член вне объявления класса, например...

ScopedPointer<AudioDeviceManager> MainContentComponent::sharedAudioDeviceManager;

Кроме того, это ошибка времени компоновки, а не ошибка времени выполнения.

person OMGtechy    schedule 01.09.2015
comment
спасибо за поправку! это сработало, когда я определил его таким же образом, но без статического ключевого слова, также в классе MainContentComponent. - person Rithesh; 02.09.2015
comment
Да, это сработает, но это также изменит смысл программы. Если этот ответ помог вам, не могли бы вы отметить его как принятый? :) - person OMGtechy; 02.09.2015