当我在多个头文件使用的头文件中包含“xmacro.h”时,出现链接错误:
Error LNK2005: "char const * * iD_Strings" (?iD_Strings@@3PAPBDA) already defined in header_file.obj
1.//"xmacro.h"
2.
3.// (1) Define code generating macro
4.
5. #ifndef XMACRO_H
6. #define XMACRO_H
7.
8. #define GENERATE_IDS \
9. X(_Name, "/Name") \
10. X(_ID, "/ID")
11.
12. // (2) Define X-Macro for generating enum members
13.
14. #define X(id, idString) id,
15. enum IDs
16. {
17. ID_LOWERBOUND = -1,
18. GENERATE_IDS
19. NUM_IDS
20. };
21. #undef X
22.
23. // (3) Define X-Macro for generating string names
24.
25. #define X(id, idString) idString,
26. const char* iD_Strings[] =
27. {
28. GENERATE_IDS
29. NULL
30. };
31. #undef X
32.
33. #endif
当我在第 23 行定义用于生成字符串名称的 X-Macro 时,它会生成错误。我如何在不重新定义它的情况下使用单个宏?
最佳答案
您的头文件包含 iD_Strings
的定义。当您从不同的源文件中包含它时,它会多次链接。即使定义相同,也会导致冲突。
您可以将 iD_Strings
声明为 static
(C 方式)或将其包装在匿名命名空间中(C++ 方式)以解决此问题。
关于c++ - X宏重新定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2187724/