我有一个代码,其中我#include<linux/videodev2.h>
. 共有三个文件:
一个头文件 - 包括:
stdint.h
和stdlib.h
. 定义了几个函数,一个结构,比如 abc,和一些 #define 宏。功能之一是int func(int, uint32_t, size_t, abc*);
一个包含很多方法的 cpp 文件,包括 .h 文件中的函数定义。
一个 main.cpp,它具有 main(),它对 .h 文件中的方法有一个函数调用(下面的完整文件)。此文件仅用于测试目的。
#include "head.h" int main() { func(5, (uint32_t)5, (size_t)5, 0); return 0; }
看到的是一个奇怪的案例:
- 如果我
linux/videodev2.h
仅包含在 .h 文件中,uint32_t
并且 .cpp 文件无法访问此标头中定义的其他内容。(我得到的错误是:uint32_t was not declared in this scope
,和uint32_t does not name a type
,等等)。即使 .h 文件的第一行是#include<linux/videodev2.h>
- 如果我在两个 cpp 文件中都包含 videodev2 标头,则仅当我在 .h 文件之前导入它 (videodev2) 时它才有效。
- 如果我
func(5, (uint32_t)5, (size_t)5, (abc*)0);
在 main.cpp 文件中使用,我会得到 abc 未在此范围内声明的错误。
我正在使用以下命令进行编译:g++ main.cpp head.cpp
我无法弄清楚为什么会这样。我想在 .h 文件中包含 videodev2 标头,因为几乎可以肯定使用 .h 文件的代码将依赖于它。但似乎将其包含在 .h 文件中根本没有效果。
我必须在这里说实话。这是我必须转换为 C++ 的 C 代码。我知道我不符合最佳实践和标准。但为什么会出现这种行为?