我決定在我的項目中使用FMOD進行聲音播放,但是我收到了很多編譯器錯誤,我不確定如何解決。使用FMG編譯項目時出現很多錯誤使用MinGW
使用FMOD看起來或多或少像這樣的類的頭文件:
#ifndef PROJECTNAME_SOUNDMANAGER_H_
#define PROJECTNAME_SOUNDMANAGER_H_
#include <iostream>
#include <fmod.h>
#include <fmod.hpp>
#include <fmod_errors.h>
class SoundManager {
public:
static SoundManager &instance();
void play(char *data, size_t size, bool loop=false);
void stopAll();
private:
void ERRCHECK(FMOD_RESULT result);
SoundManager() : mSystem(nullptr) {
initFMOD();
}
SoundManager(const SoundManager &other);
SoundManager &operator=(const SoundManager &other);
void initFMOD();
FMOD::System *mSystem;
FMOD::Sound *mSound;
FMOD::Channel *mSoundChannel;
};
#endif // PROJECTNAME_SOUNDMANAGER_H_
這裏有一些編譯錯誤的:
...../api/inc/fmod.h:1054:33: error: expected ')' before '*' token
...../api/inc/fmod.h:1056:33: error: expected ')' before '*' token
...../api/inc/fmod.h:1058:33: error: expected ')' before '*' token
...../api/inc/fmod.h:1059:33: error: expected ')' before '*' token
.....
...../api/inc/fmod.h:1465:5: error: 'FMOD_SOUND_PCMREADCALLBACK' does not name a type
...../api/inc/fmod.h:1466:5: error: 'FMOD_SOUND_PCMSETPOSCALLBACK' does not name a type
...../api/inc/fmod.h:1467:5: error: 'FMOD_SOUND_NONBLOCKCALLBACK' does not name a type
...../api/inc/fmod.h:1473:5: error: 'FMOD_FILE_OPENCALLBACK' does not name a type
.....
...../api/inc/fmod.h:1828:19: error: expected initializer before 'FMOD_Memory_GetStats'
...../api/inc/fmod.h:1829:19: error: expected initializer before 'FMOD_Debug_SetLevel'
...../api/inc/fmod.h:1830:19: error: expected initializer before 'FMOD_Debug_GetLevel'
...../api/inc/fmod.h:1831:19: error: expected initializer before 'FMOD_File_SetDiskBusy'
.....
...../api/inc/fmod.hpp:59:21: error: expected ';' at end of member declaration
...../api/inc/fmod.hpp:59:51: error: ISO C++ forbids declaration of 'release' with no type [-fpermissive]
...../api/inc/fmod.hpp:62:21: error: expected ';' at end of member declaration
...../api/inc/fmod.hpp:62:21: error: declaration of 'FMOD_RESULT FMOD::System::_stdcall'
...../api/inc/fmod.hpp:59:21: error: conflicts with previous declaration 'FMOD_RESULT FMOD::System::_stdcall'
...../api/inc/fmod.hpp:62:73: error: ISO C++ forbids declaration of 'setOutput' with no type [-fpermissive]
...../api/inc/fmod.hpp:63:21: error: expected ';' at end of member declaration
...../api/inc/fmod.hpp:63:21: error: declaration of 'FMOD_RESULT FMOD::System::_stdcall'
...../api/inc/fmod.hpp:59:21: error: conflicts with previous declaration 'FMOD_RESULT FMOD::System::_stdcall'
.....
如果這有什麼差別,我與-std=c++0x
編譯。
我嘗試過搜索,但我無法找到任何可以幫助我處理這些錯誤的東西。
請注意,我正在使用FMOD Ex 4.44.06。
編輯:我似乎已經發現了問題。當我做一個最小的例子並且在沒有-std=c++0x
的情況下編譯它時,一切都很好。但是,如果我添加該標誌,則會得到與此項目相同的錯誤。沒有辦法讓FMOD在C++ 11中表現出色嗎?
什麼*第一個*錯誤? C++錯誤傾向於級聯,並且如果在包含此文件之前出現問題*可能會有許多錯誤作爲第一個錯誤的副作用。一個常見的罪魁禍首是在類定義的末尾丟失分號。 – molbdnilo 2013-02-11 19:59:13
@molbdnilo對不起,我不清楚,打印的第一個錯誤是你在我的帖子中看到的第一個錯誤。 – Merigrim 2013-02-11 20:05:08
我下載了4.44.06,那些行號完全不符合我的fmod.h。例如,1054-1056是一個評論。 – molbdnilo 2013-02-11 20:41:30