'uint32_t' does not name a type
I'm trying to compile a C++ software package that was written in 2007 and I'm getting this error:
error: ‘uint32_t’ does not name a type
This is happening in 64-bit Ubuntu using g++ 4.5.2. It compiles fine on 64-bit CentOS using g++ 4.1.2.
Is there an #include
or a compiler flag that I'm missing? Or, should I use typedef
to assign uint32_t
to a size_t
or maybe an unsigned int
?
Solution 1:
You need to include stdint.h
#include <stdint.h>
Solution 2:
You need to #include <cstdint>
, but that may not always work.
The problem is that some compiler often automatically export names defined in various headers or provided types before such standards were in place.
Now, I said "may not always work." That's because the cstdint header is part of the C++11 standard and is not always available on current C++ compilers (but often is). The stdint.h header is the C equivalent and is part of C99.
For best portability, I'd recommend using Boost's boost/cstdint.hpp
header, if you're willing to use boost. Otherwise, you'll probably be able to get away with #include'ing <cstdint>
.
Solution 3:
I also encountered the same problem on Mac OSX 10.6.8 and unfortunately adding #include <stdint.h>
or <cstdint.h>
to the corresponding file did not solve my problem. However, after more search, I found this solution advicing to add #include <sys/types.h>
which worked well for me!