web-dev-qa-db-ja.com

不明なタイプ名「uint8_t」、MinGW

MinGWでCを使用すると、「不明な型名 'uint8_t'」などが取得されます。これを解決する方法はありますか?

60
RobotRock

stdint.hまたはinttypes.hを含めてみてください。

120
cnicutar

uint8_t型エイリアスを使用するには、stdint.h標準ヘッダーを含める必要があります。

16
ouah

編集:

明確にする:#includesの順序が重要であり、それが設計パターンの一部ではない場合(読んでください:理由はわかりません)、設計を再考する必要があります。ほとんどの場合、これは、問題を引き起こすヘッダーファイルに#includeを追加する必要があることを意味します。

この時点で、この例のメリットを議論/擁護することにはほとんど関心がありませんが、コンパイルプロセスのいくつかの微妙な違いと、エラーが発生する理由を説明するため、そのままにします。

編集終了

#include the stdint.hを使用する前に、#includeを必要とする他のライブラリインターフェイスを使用する必要があります。

例:

LCDライブラリはuint8_t型を使用します。ライブラリをインターフェイス(Display.h)と実装(Display.c)で作成しました

Display.cには、次のインクルードがあります。

#include <stdint.h>
#include <string.h>
#include <avr/io.h>
#include <Display.h>
#include <GlobalTime.h>

そして、これは機能します。

ただし、次のように再配置した場合:

#include <string.h>
#include <avr/io.h>
#include <Display.h>
#include <GlobalTime.h>
#include <stdint.h>

あなたが説明したエラーが表示されます。これは、Display.hstdint.hからのものを必要とするが、Display.hがコンパイルされた後にその情報がコンパイルされるためアクセスできないためです。

したがって、stdint.hをそれを必要とするライブラリの上に移動すると、エラーは発生しなくなります。

5
LanchPad