C 定义了?宏?在标题中可见但在实施中缺少(Linker报告未解决的外部)
C++ defined ?macro? visible in header yet missing in implementation (linker reports unresolved external)
我有一些用于特定调试目的的类,因此我仅在对给定功能感兴趣的时候才使用它
为了防止源垃圾在不需要时,我试图处理预处理程序,因此结构就是这样:
===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/envernable之前)时,链接器报告未解决的外部(例如,如果在标题中定义了宏,并且未在CPP文件中定义)
问题:为什么/如何/什么是更好的方法
我希望CPP文件是单独翻译的,而不知道包含链(因此无法提供有关定义的信息)
是这样吗?如果是这样,如何解决方法,因此我可以在多个项目之间使用恒定的" TMP。
只是为了澄清
->当我将" #define tmpusenow"放置在相关标头(TMP.H)内部时,所有这些都可以正常工作
->相关标头(TMP.H)来自相关定义文件(TMP.CPP)
->与简化项目一起测试的相同行为,仅与示例
中的三个文件一起测试->相关文件(tmp.h,tmp.cpp)被假定在许多项目之间共享常数文件(因此,我看不到如何命令它们包含带有定义的预定的第三个文件,这将是用于使用的项目的个体他们)
是的,每个CPP文件都是独立处理的。如果我是您,我将确保在tmp.cpp中包含tmp.h,并且我只会在tmp.h中定义nowusetmp。
您可以将其添加到tmp.cpp函数(名称IT use_tmp
)默认value = nowUseTmp
的附加参数,并检查特定行为的IT值:
tmp.h:
/* takes par2 value from the define */
void use_tmp(int par1, int par2 = nowUseTmp);
tmp.cpp:
void use_tmp(int par1, int par2)
{
if(!par2) /*do smth*/ return;
}
相关文章:
- Android NDK传感器向事件队列报告奇怪的间隔
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- 使用std::source_location报告错误的最佳实践
- xmake总是报告:错误:无法获取cxx的程序,为什么
- 当用户超过按钮点击限制时报告
- 使用调试/崩溃报告将应用程序部署到客户端
- 为什么cudaMemGetInfo报告设备内存总量的变化
- 为什么瓦尔格林德在不释放恶意内存后没有报告任何问题?
- 内存清理程序报告全局对象构造中未初始化值的使用
- QDataStream 读取和写入的字节数比 QFile::length() 报告要多
- QT GStreamer Windows linker problems
- 在 Linux 中使用 ioctl() 获取隐藏功能报告时,零字节消失
- Valgrind 在 std::string::swap 中报告 SIGILL
- DRD 报告"conflicting load" std::mutex::lock 上的错误
- 柯南,CMake.test()生成XML报告
- 如何构建一个异常类来报告C++中的哪些文件和行号?
- Valgrind 在 QThread::start() 上报告内存泄漏
- 我是否访问了已释放的内存,或者在这种情况下DrMemory报告不正确?
- C 定义了?宏?在标题中可见但在实施中缺少(Linker报告未解决的外部)
- Clang linker 报告"symbol not found",尽管'nm -m'透露该名称存在于正在链接的库中