Определение директивы компилятора в другом файле Переполнение стека

Рассмотрите следующий фрагмент кода,

    // header file
#define TEXT_ENUM                //////////// HERE
#ifdef TEXT_ENUM
#define TEXT_HANDLING_MACRO  \
static const char * TEXT[]; \
static const char * getText( int _enum ) { \
return TEXT[_enum]; \
}
#else
#define TEXT_HANDLING_MACRO
#endif

struct Foo {
TEXT_HANDLING_MACRO
};

   // cpp file
#include "foo.h"#ifdef TEXT_ENUM
const char * Foo::TEXT[] = {
"ONE",
"TWO",
"THREE",
0
};
#endif

   // other_file.cpp
#include <iostream>
#include "foo.h"void bar() {
std::cout << Foo::TEXT[0] <<std::endl;
}

Это прекрасно работает, но в следующем коде это не так,

    // header file
#ifdef TEXT_ENUM
#define TEXT_HANDLING_MACRO  \
static const char * TEXT[]; \
static const char * getText( int _enum ) { \
return TEXT[_enum]; \
}
#else
#define TEXT_HANDLING_MACRO
#endif

struct Foo {
TEXT_HANDLING_MACRO
};

   // cpp file
#include "foo.h"#ifdef TEXT_ENUM
const char * Foo::TEXT[] = {
"ONE",
"TWO",
"THREE",
0
};
#endif

   // other_file.cpp
#include <iostream>
#define TEXT_ENUM                //////////// HERE
#include "foo.h"void bar() {
std::cout << Foo::TEXT[0] <<std::endl;
}

Разница в положении #include TEXT_ENUMЯ получаю ошибку неопределенной ссылки на Foo::TEXT, Я определил TEXT_ENUM перед включением файла.

Как я могу решить это?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …