38
votes

I'm getting the error

error: 'INT32_MAX' was not declared in this scope

But I have already included

#include <stdint.h>

I am compiling this on (g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-44) with the command

g++ -m64 -O3 blah.cpp

Do I need to do anything else to get this to compile? or is there another C++ way to get the constant "INT32_MAX"?

Thanks and let me know if anything is unclear!

7
@WalterTross baaaad baad idea,IanNorton
@IanNorton, maybe you are right, but I still have to see a place where INT32_MAX is a different valueWalter Tross
My Eclipse (Helios)/MinGW setup did not highlight <limits> as an error, and I was able to right click and open declaration, but I had to change 'include<limits>' to 'include <limits.h>' in order to stop INT_MAX reporting a 'not declared in this scope' error.Clarius

7 Answers

25
votes
 #include <cstdint> //or <stdint.h>
 #include <limits>

 std::numeric_limits<std::int32_t>::max();

Note that <cstdint> is a C++11 header and <stdint.h> is a C header, included for compatibility with C standard library.

Following code works, since C++11.

#include <iostream>
#include <limits>
#include <cstdint>

struct X 
{ 
    static constexpr std::int32_t i = std::numeric_limits<std::int32_t>::max(); 
};

int main()
{
    switch(std::numeric_limits<std::int32_t>::max()) { 
       case std::numeric_limits<std::int32_t>::max():
           std::cout << "this code works thanks to constexpr\n";
           break;
    }
    return EXIT_SUCCESS;
}

http://coliru.stacked-crooked.com/a/4a33984ede3f2f7e

49
votes

Quoted from the man page, "C++ implementations should define these macros only when __STDC_LIMIT_MACROS is defined before <stdint.h> is included".

So try:

#define __STDC_LIMIT_MACROS
#include <stdint.h>
8
votes

Hm... All I needed to do was #include <climits> nothing else on this page worked for me.

Granted, I was trying to use INT_MIN.

7
votes
#include <iostream>
#include <limits.h> or <climits>

worked for me

0
votes

Including the following code after #include <iostream> worked for me:

#include <limits.h>

I am using the following compiler:

g++ 5.4.0-6

0
votes

I was also facing the similar problem,just need to add- #include <limits.h> after #include <iostream>

0
votes

I ran into similar issue while using LLVM 3.7.1 c++ compiler. Got the following error while trying to compile gRPC code as part of building some custom library

src/core/lib/iomgr/exec_ctx.h:178:12: error: use of undeclared identifier 'INT64_MAX'

The compilation went through after adding -D__STDC_LIMIT_MACROS as one of the options to c++ compiler.

.../bin/c++ -D__STDC_LIMIT_MACROS -I{LIBRARY_PATHS} testlib.cc -o testlib