c++ - 为什么我不能转发声明指针结构?

标签 c++ pointers struct typedef

我正在使用一个名为 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");

GCC 返回:

     ||=== 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)) ===|

编辑:我需要动态分配结构,因为可能会加载数千个文件。堆栈内存不行。

最佳答案

new Mix_Music[3] 中,编译器需要知道每个对象有多大,才能知道要分配多少空间。前向声明不会提供该信息。

您可能需要 new Mix_Music*[3]。尽管堆栈分配可能有效,并且 std::arraystd::vector 会让事情变得更好。

关于c++ - 为什么我不能转发声明指针结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36560325/

相关文章:

c++ - CHUNKSTATE 和 STAT_CHUNK 未定义

c - 在c中的结构指针数组上使用qsort时比较整数的函数

python - 什么时候/为什么我应该在 python 中使用结构库来打包和解包?

c++ - 包裹一个数字?

c++ - linux 正确的语法以通过配置传递 libstdc++.so.6 的自定义目录

数组中的 char 指针值

c++ - 在数组中获取和存储内存地址的问题

c++ - 在类定义中使用结构的细节和好处

使用 malloc 时出现编译器错误(需要左值作为赋值的左操作数)

c++ - 在 VS 2010 中调试时如何查看动态分配数组的内容?