#define 函数的多重定义
multiple definition of #define function
我有 logger.h 文件并定义了一个用于日志记录的宏函数:
//logger.h:
#ifndef _LOGGER_H_
#define _LOGGER_H_
#ifdef LOG_DEBUG
ofstream debug_log("debug.log");
#define log(...) debug_log << __FILE__ << ":" << __PRETTY_FUNCTION__ << ":" << __LINE__ << "| " << __VA_ARGS__ << std::endl
#else
#define log(...)
#endif
#endif
这个头文件包含在多个c文件中。并使用 log() 函数。 g++ 给出:
/tmp/ccMAjYSm.o:(.bss+0x0): multiple definition of `debug_log'
/tmp/ccHj3w7u.o:(.bss+0x0): first defined here
/tmp/cc3LQ9GQ.o:(.bss+0x0): multiple definition of `debug_log'
/tmp/ccHj3w7u.o:(.bss+0x0): first defined here
有线索吗?
最终 #include
s logger.h 的每个源文件都会看到:
ofstream debug_log("debug.log");
然后创建该对象。现在您有多个名为 debug_log
.
的对象
转发在此处声明对象,但将实例化放在 .cpp 文件中。
如果您在项目级别(或多个翻译单元)声明 LOG_DEBUG
,他们都会看到
ofstream debug_log("debug.log");
行,您将有多个定义。
一个可能的解决方案:将它放入一个翻译单元,同时让所有其他翻译单元知道它的存在
页眉
#ifndef _LOGGER_H_
#define _LOGGER_H_
#ifdef LOG_DEBUG
extern ofstream debug_log;
#define log(...) debug_log << __FILE__ << ":" << __PRETTY_FUNCTION__ << ":" << __LINE__ << "| " << __VA_ARGS__ << std::endl
#else
#define log(...)
#endif
#endif
一个cpp文件
ofstream debug_log("debug.log");
我有 logger.h 文件并定义了一个用于日志记录的宏函数:
//logger.h:
#ifndef _LOGGER_H_
#define _LOGGER_H_
#ifdef LOG_DEBUG
ofstream debug_log("debug.log");
#define log(...) debug_log << __FILE__ << ":" << __PRETTY_FUNCTION__ << ":" << __LINE__ << "| " << __VA_ARGS__ << std::endl
#else
#define log(...)
#endif
#endif
这个头文件包含在多个c文件中。并使用 log() 函数。 g++ 给出:
/tmp/ccMAjYSm.o:(.bss+0x0): multiple definition of `debug_log'
/tmp/ccHj3w7u.o:(.bss+0x0): first defined here
/tmp/cc3LQ9GQ.o:(.bss+0x0): multiple definition of `debug_log'
/tmp/ccHj3w7u.o:(.bss+0x0): first defined here
有线索吗?
最终 #include
s logger.h 的每个源文件都会看到:
ofstream debug_log("debug.log");
然后创建该对象。现在您有多个名为 debug_log
.
转发在此处声明对象,但将实例化放在 .cpp 文件中。
如果您在项目级别(或多个翻译单元)声明 LOG_DEBUG
,他们都会看到
ofstream debug_log("debug.log");
行,您将有多个定义。
一个可能的解决方案:将它放入一个翻译单元,同时让所有其他翻译单元知道它的存在
页眉
#ifndef _LOGGER_H_
#define _LOGGER_H_
#ifdef LOG_DEBUG
extern ofstream debug_log;
#define log(...) debug_log << __FILE__ << ":" << __PRETTY_FUNCTION__ << ":" << __LINE__ << "| " << __VA_ARGS__ << std::endl
#else
#define log(...)
#endif
#endif
一个cpp文件
ofstream debug_log("debug.log");