gpt4 book ai didi

c++ - 在 header 中使用 std::vector 作为输入参数定义函数的原型(prototype)

转载 作者:搜寻专家 更新时间:2023-10-31 01:18:02 24 4
gpt4 key购买 nike

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

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

我已经尝试在头文件中包含几个指令。例如,在头文件中声明结构并包含 vector 头可以解决问题,但这样我就得到了“多个定义/首先在此处定义”错误的负载。我能做什么?

编辑

现在我的标题看起来像:

#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_ */

此时,我需要在另一个 header 中声明另一个原型(prototype):

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应该在它自己的 header 中定义,并包含在使用它的两个 header 中。

关于c++ - 在 header 中使用 std::vector 作为输入参数定义函数的原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7603718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com