我正在使用一个名为SDL_mixer的略显模糊的声音库。 GCC抱怨我前面声明一个指针结构?我做错了什么?
Mix_Music **music; // music[2] must be a pointer to fit any random file
music = new Mix_Music[3];
music[2] = Mix_LoadMUS("fire.ogg");
海湾合作委员会回归:
||=== Build file: "no target" in "no project" (compiler: unknown) ===|
xxx.cpp||In function 'int SDL_main(int, char**)':|
xxx.cpp|28|error: invalid use of incomplete type 'Mix_Music {aka struct _Mix_Music}'|
SDL_mixer.h|131|error: forward declaration of 'Mix_Music {aka struct _Mix_Music}'|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
编辑:我需要动态分配结构,因为可能会加载数千个文件。堆栈内存不行。
答案 0 :(得分:1)
在new Mix_Music[3]
中,编译器需要知道每个对象的大小,以便知道要分配多少空间。前瞻性声明不会向其提供该信息。
你可能想要new Mix_Music*[3]
。虽然堆栈分配可能有效,但std::array
或std::vector
会使事情变得更好。