0

考虑以下代码片段,

    // 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。

我该如何解决?

4

0 回答 0