Я столкнулся с проблемой при объявлении некоторых глобальных переменных с помощью макросов. Вот случай:
оригинальный код:
/* some_config.h */
static const std::string KEYWORDS_A[] = {"AXX", "AYY"};
static const std::vector<std::string> KEYWORDS_A_VEC(KEYWORDS_A, KEYWORDS_A + sizeof(KEYWORDS_A) / sizeof(KEYWORDS_A[0]));
static const std::string KEYWORDS_B[] = {"BXX", "BYY"};
static const std::vector<std::string> KEYWORDS_B_VEC(KEYWORDS_B, KEYWORDS_B + sizeof(KEYWORDS_B) / sizeof(KEYWORDS_B[0]));
текущий код:
/* some_config.h */
#define REGISTER_VEC(NAME) \
static const std::vector<std::string> KEYWORDS_##NAME_VEC(KEYWORDS_##NAME, KEYWORDS_##NAME + sizeof(KEYWORDS_##NAME) / sizeof(KEYWORDS_##NAME[0]))
static const std::string KEYWORDS_A[] = {"AXX", "AYY"};
REGISTER_VEC(A);
static const std::string KEYWORDS_B[] = {"BXX", "BYY"};
REGISTER_VEC(B);
some_config.h был включен в some.cpp, в котором использовались переменные KEYWORDS_A_VEC и KEYWORDS_B_VEC. Однако для текущего кода компилятор g ++ выдаст ошибку, не найдя определения KEYWORDS_A_VEC и KEYWORDS_A_VEC.
Что-то не так с кодом? Спасибо за вашу помощь.