89

2007年に作成されたC++ソ​​フトウェアパッケージをコンパイルしようとすると、次のエラーが発生します。

error: ‘uint32_t’ does not name a type

これは、g++4.5.2を使用する64ビットUbuntuで発生しています。g++4.1.2を使用して64ビットCentOSで正常にコンパイルされます。

#include欠落しているまたはコンパイラフラグはありますか?または、またはtypedefに割り当てるuint32_tために使用する必要がsize_tありunsigned intますか?

4

9 に答える 9

169

stdint.hを含める必要があります

 #include <stdint.h>
于 2012-06-17T05:37:11.830 に答える
36

する必要がありますが#include <cstdint>、それが常に機能するとは限りません。

問題は、一部のコンパイラは、そのような標準が導入される前に、さまざまなヘッダーまたは提供されたタイプで定義された名前を自動的にエクスポートすることが多いことです。

さて、「いつもうまくいくとは限らない」と言いました。これは、cstdintヘッダーがC ++ 11標準の一部であり、現在のC ++コンパイラーで常に使用できるとは限らないためです(ただし、多くの場合は使用可能です)。stdint.hヘッダーはCと同等であり、C99の一部です。

最高の移植性のために、ブーストboost/cstdint.hppを使用する場合は、ブーストのヘッダーを使用することをお勧めします。そうでなければ、おそらく#includeで逃げることができるでしょう<cstdint>

于 2012-06-17T05:35:33.657 に答える
9

Mac OSX 10.6.8でも同じ問題が発生しましたが、残念ながら、対応するファイルに#include <stdint.h>または<cstdint.h>を追加しても問題は解決しませんでした。しかし、さらに検索した結果、このソリューションを追加することをお勧めし#include <sys/types.h>ます。これは私にとってうまく機能しました。

于 2014-03-13T14:35:56.973 に答える
6

他の回答は、コンパイラがC++11に準拠していることを前提としています。もしそうなら、それは問題ありません。しかし、古いコンパイラを使用している場合はどうなりますか?

ネットのどこかで次のハックを拾いました。それは私にとって十分に機能します:

  #if defined __UINT32_MAX__ or UINT32_MAX
  #include <inttypes.h>
  #else
  typedef unsigned char uint8_t;
  typedef unsigned short uint16_t;
  typedef unsigned long uint32_t;
  typedef unsigned long long uint64_t;
  #endif

もちろん、持ち運びはできません。ただし、コンパイラでは機能する可能性があります。

于 2012-08-21T00:39:02.993 に答える
2

opencvヘッダーを含めたときに発生した場合。

ヘッダーの順序を変更することをお勧めします。

opencvヘッダーを標準のC++ヘッダーのすぐ下に配置します。

このような:

#include<iostream>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
于 2015-09-18T05:35:19.527 に答える
1

base.mkファイルに以下を追加します。次の3行目は重要です -include $(TOP)/defs.mk

CFLAGS=$(DEBUG) -Wall -W -Wwrite-strings 
CFLAGS_C=-Wmissing-prototypes
CFLAGS_CXX=-std=c++0x
LDFLAGS=
LIBS=

#errorを回避するにはこのファイルには、次のISOC++標準であるC++0xのコンパイラとライブラリのサポートが必要です。このサポートは現在実験段階であり、-std = c++0xまたは-std=gnu++0xコンパイラオプションで有効にする必要があります

于 2013-02-11T03:46:45.740 に答える
1

インターネットからダウンロードしたライブラリをコンパイルしようとしても、同じ問題が発生しました。私の場合、#include <cstdint>コードにはすでにが含まれていました。私はそれを追加して解決しました:

using std::uint32_t;
于 2016-04-05T12:15:31.897 に答える
0

/usr/include/x86_64-linux-gnu/bitsに移動してstdint-uintn.hを開き、これらの行を追加するだけです。

typedef __uint8_t uint8_t;
typedef __uint16_t uint16_t;
typedef __uint32_t uint32_t;
typedef __uint64_t uint64_t;

もう一度stdint-intn.hを開き、追加します

typedef __int8_t int8_t;
typedef __int16_t int16_t;
typedef __int32_t int32_t;
typedef __int64_t int64_t;

これらの行はすでに存在していることに注意してください。不足している行をコピーして追加してください。

于 2019-10-07T04:30:43.987 に答える
-3

iostreamを含める必要があります

#include <iostream>
using namespace std;
于 2019-10-12T06:12:26.563 に答える