考虑以下代码片段,
// 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。
我该如何解决?