使用 g++ 编译时出现多个错误?

Multiple Errors When Compiling with g++?

编译我的代码时,我收到许多不同的错误,例如:

frame.h:5:48: error: expected identifier before '(' token
frame.h:5:17: error: variable or field 'writeFrame' declared void
frame.h:5:17: error: 'GifWriter' was not declared in this scope
frame.h:5:34: error: expected primary-expression before 'double'

这些错误或多或少适用于所有函数参数。

这是头文件:

#ifndef frame_h
#define frame_h

void writeFrame(GifWriter* gptr, double delay, (std::vector<uint8_t>& frameOut), ImageData* image1ptr, struct Options mode, int frameNum, bool* runptr);
  
void runPRGM(ImageData* image1ptr, struct Options mode);
  
#endif

我的.cpp 文件确实包含了所需的库和这个.h 文件,并且这两个函数的声明方式相同。我确定方括号和圆括号已正确解析。除了 .cpp 中的函数定义外,这些是函数声明的唯一实例。 我可能做错了什么?我确实在其他一些线程中读到 g++ 也与某些 void 函数冲突,但没有对此进行详细说明。

(std::vector<uint8_t>& frameOut) 更改为 std::vector<uint8_t>& frameOut

不确定为什么您觉得有必要将括号放在那里,第一条错误消息告诉您这就是问题所在。

另请注意,您应该编写 header 个文件,使它们成为 self-contained。这意味着这个 header 文件应该有 #include <vector> 以及 GifWriter 等的声明。如果情况合适,这些可能是前向声明。

所以 header 应该看起来像这样

#ifndef frame_h
#define frame_h

#include <vector>  // for vector
#include <cstdint> // for uint8_t

class GifWriter; // forward declarations
class ImageData;
struct Options;

void writeFrame(GifWriter* gptr, double delay, std::vector<uint8_t>& frameOut, ImageData* image1ptr, Options mode, int frameNum, bool* runptr);
  
void runPRGM(ImageData* image1ptr, Options mode);
  
#endif

图像假设 GifWriterImageDataOptions 是您编写的 类,因此可以安全地转发声明它们。如果不是,那么您应该在此处包含那些 类 的 header 文件。