C++, error: '__locale_t' has not been declared

c, c++, eclipse

Solution

Try compiling with:

g++ -D__USE_XOPEN2K8 ...

(see also https://sourceware.org/bugzilla/show_bug.cgi?id=10456 which mentions that `xlocale.h` is only included from `string.h` when `__USE_XOPEN2K8` is defined)

Problem

I'm new to C++, I got `error: '__locale_t' has not been declared` when I included some header files, like `#include "ruby.h"` , `#include <string.h>` and so on, but there's no problem for `#include <stdio.h>`, I'm using eclipse under Linux, the detailed error for `#include "ruby.h"` and `#include <string.h>` is: ``` /usr/include/string.h:548: error: '__locale_t' has not been declared /usr/include/string.h:549: error: nonnull argument references non-pointer operand (argument 1, operand 3) /usr/include/string.h:552: error: '__locale_t' has not been declared /usr/include/string.h:553: error: nonnull argument references non-pointer operand (argument 1, operand 4) ``` The order of the include is: ``` #include "Abc.h" #include <string.h> #include "ruby.h" #include <stdio.h> ``` Where `Abc` is the class name. This is the `Abc` class, nothing added except the `include`: ``` #include "Abc.h" #include <stdio.h> #include <string.h> #include "ruby.h" #include "ose_gw.h" namespace a { Abc::Abc() { // TODO Auto-generated constructor stub } Abc::~Abc() { // TODO Auto-generated destructor stub } } /* namespace a */ ```

Original source