在头文件中使用std::vector作为输入参数定义函数原型
Define the prototype of a function with a std::vector as input parameter in an header
我疯了,因为我不能定义我实际使用的函数的原型。我正在做的是创建一个名为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
应该在自己的头文件中定义,并从使用它的两个头文件中包含。
相关文章:
- 将输入参数作为右值引用传递?
- 是否可以在命令行中将输入参数传递给可执行文件
- C++基于输入参数的动态代码生成
- 我想知道为什么"std::unique_ptr<int> foo(新 int)"是合法的,因为"std::<int>unique_ptr"要求输入参数类型应该是"int"?
- 如何使用输入参数作为文件的传递?
- 在函数中使用运算符重载,在 c++ 中使用 const 类型输入参数
- 提供变量作为 MATLAB 系统命令的输入参数,以便C++可执行文件
- 函数的函数无法识别输入参数
- 当迭代器(输入参数)通常不是constexpr时,constexpr算法真的有用吗
- 如何将一个使用参数包和typename的类作为函数(c++)的输入参数
- CvMat:输入参数的大小不匹配
- 在什么情况下,使用'const T*'输入参数比'const T&'更可取?
- std::具有两个输入参数的矢量构造函数
- GoogleMock:如何根据另一个输入参数设置ArgReferee?
- 模板化函数以从输入参数推断返回类型 stl-container
- GoogleMock:如何验证输入参数的调用次数?
- 当我将 char 数组发送到输入参数为字符串的函数时会发生什么?
- 应该接受不同输入参数的纯虚函数 - 应该如何实现
- C++主函数的输入参数
- STD :: Atomic_fetch为什么将指针作为其输入参数