私は私がいるコードを持っています#include<linux/videodev2.h>
。3つのファイルがあります:
1つのヘッダーファイル-インクルード:
stdint.h
およびstdlib.h
。いくつかの関数、構造体、たとえばabc、およびいくつかの#defineマクロを定義します。機能の1つはint func(int, uint32_t, size_t, abc*);
.hファイル内の関数の定義を含む多くのメソッドを含む1つのcppファイル。
.hファイル(以下の完全なファイル)のメソッドへの関数呼び出しを持つmain()を持つ1つのmain.cpp。このファイルはテストのみを目的としています。
#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)をインポートした場合にのみ機能します。
- main.cppファイルで使用する
func(5, (uint32_t)5, (size_t)5, (abc*)0);
と、このスコープでabcが宣言されていないというエラーが表示されます。
次のコマンドを使用してコンパイルしています。g++ main.cpp head.cpp
これがなぜなのか理解できません。.hファイルを使用するコードがそれに依存することはほぼ確実なので、videodev2ヘッダーを.hファイルに含めたいと思います。しかし、それを.hファイルに含めてもまったく効果がないようです。
私はここで正直でなければなりません。これは私がC++に変換しなければならなかったCコードでした。私はベストプラクティスと基準に準拠していないことを知っています。しかし、なぜこの動作が見られるのですか?