So I’m having issues with some code that I’ve inherited. This code was building fine in a C-only environment, but now I need to use C++ to call this code. The header problem.h contains:
#ifndef _BOOL
typedef unsigned char bool;
static const bool False = 0;
static const bool True = 1;
#endif
struct astruct
{
bool myvar;
/* and a bunch more */
}
When I compile it as C++ code, I get error C2632: 'char' followed by 'bool' is illegal
I get the same error if I wrap the #include "problem.h" in extern "C" { ... } (which I don’t understand, because there should be no keyword bool when compiling as C?)
I tried removing the block from #ifndef _BOOL to #endif, and compiling as C++, and I get errors:
error C2061: C requires that a struct or union has at least one member
error C2061: syntax error: identifier 'bool'
I just don’t understand how the C++ compiler is complaining about a redefinition of bool, yet when I remove the redefinition and try to just use bool to define variables, it doesn’t find anything.
Any help is greatly appreciated.
Because
boolis a basic type in C++ (but not in C), and can’t be redefined.You can surround your code with