c++中的x -宏替换
X-macro Substitution in C++
我在C中使用了很多x -宏,但似乎在使用c++和Qt时出现了问题。我正在使用x -宏来同步一些名称与一些字符串在几个项目中。在一个项目中,我只需要生成一个"const char* const NAME = STRING;"值和一个在"。h"文件中对该常量的外部引用:"extern const char* const NAME;"。当我编译项目时,我得到一个未定义的引用我的名字。这就是我在"XML_Keywords.h"文件中定义x -宏的内容。
#define SELECT_KEYWORD(a, b) a,
#define SELECT_STRING(a, b) b,
#define SELECT_GEN_CONST(KEY, STR) const char* const KEY = STR;
#define SELECT_EXT_CONST(KEY, STR) extern const char* const KEY;
#define FOR_UNIT_KEYWORDS(apply)
apply(UNIT_NAME_STR, "UnitNameStr" )
apply(UNIT_CODE_STR, "UnitCodeStr" )
apply(UNIT_HDWR_ID, "UnitHdwrID" )
在我的"Keywords.cpp"文件中,我这样做是为了扩展成一系列"const char* const"声明。
#include "XML_Keywords.h"
FOR_UNIT_KEYWORDS(SELECT_GEN_CONST)
在我的"Keywords.h"文件中,我这样做是为了扩展到我的外部定义。
#include "XML_Keywords.h"
FOR_UNIT_KEYWORDS(SELECT_EXT_CONST)
我包括"关键字。h"在我需要的其他。cpp文件,但我一直得到一个未定义的引用为UNIT_NAME_STR, UNIT_CODE_STR和UNIT_HDWR_ID。我找不到我的错误。谢谢。
好吧,对于任何一个C程序员,但现在正在做c++,常量的处理方式是非常不同的。我发现我的代码在keyword.cpp文件中使用显式const定义的原因是我还在keyword.cpp文件中包含了keyword.h文件,该文件将这些常量定义为extern。当h文件不包含在cpp文件中时,即使使用这些常量的其他文件导入了h文件,也不会导出这些常量。这与c完全不同。在阅读了更多之后,似乎应该将常量放在h文件中,根本不应该有cpp文件。
相关文章:
- 如何用转义符替换字符串中的所有特殊字符
- 按平均值替换数组中的元素
- 删除/替换C++字符串中的多字符 (ÿû)
- 替换字符串中的单词,但忽略引号中的单词
- 替换字符串位置 X 中的单词C++
- 用矩阵将函数中的整数值替换定义的常量
- 使用迭代器替换映射中的常量项的方法
- 搜索并替换结构向量中的值
- 如何在C ++中替换整数的前两位数字?
- 什么可以用来替换代码中的循环和 if 语句?
- 如何替换双端对象中的元素?
- 使用 Rcpp 加速替换迭代算法中的列表和向量元素是否合法?
- 如何将一个范围替换为矢量中的另一个范围?
- 尝试将文本文件中的整数替换为用户输入的整数 [C++]
- 用 X 替换字符串中的字符C++练习
- 替换 2D 数组中的字符
- 如何使用regex_replace将子字符串替换为字符串中的另一个子字符串,同时保持整个文本完整?
- 用最少的代码行数替换c++中的一组字符
- 我有模板功能.通过使用函数std::for_each,用这个容器中的最大数字替换每个正数
- 字符串替换中的c++错误