在头文件中使用std::vector作为输入参数定义函数原型

Define the prototype of a function with a std::vector as input parameter in an header

本文关键字:输入 参数 定义 原型 函数 vector 文件 std      更新时间:2023-10-16

我疯了,因为我不能定义我实际使用的函数的原型。我正在做的是创建一个名为func1.h的头文件,在那里我定义了这个原型(这是因为我需要从其他地方实现的其他函数调用这个函数):

void FileVector(std::vector<Files> &,const char*,bool);

其中Files是在func1.cpp

中定义的结构体
struct Files{
        HANDLE h;
        WIN32_FIND_DATA info;
        } file;

我还有另一个接受std::vector<Files> &作为输入参数的函数,但当我尝试编译(使用Eclipse c++)时,我得到了这些错误:

/FileVector.h:11:22: error: variable or field 'FileVector' declared void
../FileVector.h:11:17: error: 'vector' is not a member of 'std'
../FileVector.h:11:29: error: 'Files' was not declared in this scope

我试图在头文件中包括几个指令..例如,在头中声明结构体,并包括矢量头做的技巧,但这种方式我得到了"多个定义/首先定义在这里"的错误负载。我能做什么?

<标题>编辑

现在我的标题看起来像:

#ifndef FILEVECTOR_H_
#define FILEVECTOR_H_
#include <vector>
#include <windows.h>
 struct Files{
        HANDLE h;
        WIN32_FIND_DATA info;
        };
 void FileVector(std::vector<Files> &,const char*,bool);
 #endif /* FILEVECTOR_H_ */
此时,我需要在另一个头文件中声明另一个原型:
void ProcessInput(vector<Files>&);

,但我不能使用相同的技巧,因为我必须重新定义文件结构体。我该如何解决这个问题?

确保在头文件中包含<vector>。您还提到Files的定义在cpp文件中,您也应该将其移到头文件中。

也放置适当的标题保护以避免多个定义错误:

#ifndef MY_HEADER_FILE_GUARD
#define MY_HEADER_FILE_GUARD
... your content here ...
#endif /*MY_HEADER_FILE_GUARD*/

更新:只要在新标题中包含filevector.h就可以了。但是,看起来Files应该在自己的头文件中定义,并从使用它的两个头文件中包含。