在不同的文件C ++中定义编译器指令

时间:2016-10-23 17:57:55

标签: c++ compiler-directives

请考虑以下代码段,

    // 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 个答案:

没有答案