gpt4 book ai didi

C++定义的?宏?在 header 中可见但在实现中丢失(链接器报告外部未解决)

转载 作者:行者123 更新时间:2023-11-28 07:08:42 26 4
gpt4 key购买 nike

我有一些用于特定调试目的的类,所以我只在对给定功能感兴趣时才使用它

为了在不需要时防止源代码垃圾,我尝试通过预处理器处理它,所以结构是这样的:

===main.cpp===
#define nowUseTmp
#include "tmp.h"
/*normal code which accesses tmp via macros*/
===EOF===

===tmp.h===
#ifdef nowUseTmp
/* class declaration */
/* macros to use static methods on class*/
#else
/*empty macro variants, so they may freely stay in code where needed*/
#endif
===EOF===

===tmp.cpp===
/*EXPECTED PLACE OF PROBLEM*/
#ifdef nowUseTmp
/* definitions */
#endif
===EOF===

问题是,当我启用 nowUseTmp(在 the_very_first/each include 之前)时,链接器报告未解析的外部(比如宏是在 header 中定义的,而不是在 cpp 文件中定义的)

问题:为什么/如何/什么是更好的方法

我希望 cpp 文件是单独翻译的,不知道包含链(因此不能有关于定义的信息)

是这样吗?如果是这样,如何解决,这样我就可以在多个项目之间拥有常量“tmp.*”文件,并为每个项目单独管理启用/禁用(即不在相关 header 中使用定义)

澄清一下

->当我将“#define tmpUseNow”放入相关 header (tmp.h) 时,一切正常

->相关头文件(tmp.h)包含在相关定义文件(tmp.cpp)中

->与示例中一样,使用仅包含三个文件的简化项目测试了相同的行为

-> 相关文件(tmp.h、tmp.cpp)被假定为在许多项目之间共享的常量文件(所以我看不出如何命令它们包含带有定义的预定第三个文件,这对于使用的项目来说是单独的他们)

最佳答案

是的,每个cpp文件都是独立处理的。如果我是你,我会确保在 tmp.cpp 中包含 tmp.h,而且我只会在 tmp.h 中定义 nowUseTmp。

关于C++定义的?宏?在 header 中可见但在实现中丢失(链接器报告外部未解决),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21364055/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com