2012-01-21 43 views
44

MinGWでCを使用しているような「unknown type name 'uint8_t'」などがあります。 これを解決する方法はありますか?不明なタイプ名 'uint8_t'、MinGW

+1

いくつかのコードを投稿してください。 –

+5

'stdint.h'をインクルードしましたか? – Necrolis

答えて

87

またはinttypes.hを含めるようにしてください。

+0

私はまだuint32_tのエラーを取得しますが、stdint.hを含めて他のものを解決しました。 – RobotRock

10

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

3

#includestdint.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を必要なライブラリの上に移動すると、エラーはもう発生しません。

+14

これはデザインが貧弱なため、 'Display.h'に' #include 'が含まれているはずです。あなたのためにインクルードするファイルに頼らないでください。それはヘッダーガードがここにあるものです。 – Jerska

+0

これは少し不完全です。なぜインクルードがソースファイルに含まれてはならないのかについての説明を展開したり提供したりできますか?私のインクルードは、ライブラリが提供する関数に必要な型を提供しないので、ヘッダファイルに入れる必要はないと思います。 – LanchPad

+0

任意のファイルのヘッダーから何かを使用すると、そのファイルをソースに入れるだけです。ヘッダーにすべてのファイルを含める必要があるとは言いませんでした。私のコメントでは、ファイルを動作させるためには、ファイルを別のファイルの前にインクルードする必要があるのはどれほどの悪い設計であるかを指摘しています。 ファイルの前に毎回これを含める必要があるため、スペースを節約できません。あなたの 'Display.h'が' stdint.h'を必要とするならば、それを直接それに入れないのは普通ではありません。 – Jerska

関連する問題