记一个编写宏时的错误
错误背景:
当时是已经基本写好了日志系统,为了使日志系统更方便使用,所以还需要定义一系列宏。
出错的宏如下:
#define SYLAR_LOG_LEVEL(logger, level) \
if (logger->getLevel() <= level) \
sylar::LogEventWrap(sylar::LogEvent::ptr(new LogEvent(logger, level, \
__FILE__, __LINE__, 0, sylar::GetThreadId(), sylar::GetFiberId(), time(0)))).getSS()
make时报错信息如下:
我就起了怪了,我的小括号都是成双成对的,怎么会出错???
上图中的这一段才是真正有用的信息。意思是:LogEvent
前面需要类型说明,即,编译器不知道LogEvent
是什么类型,所以可以想到这里缺少sylar::
作用域。
解决办法:
出错原因其实是:宏里面少写一个sylar::
的作用域。如下图所示:
修改之后代码可以正确运行。
但还是不晓得报错信息和这个错误原因有啥关系。(摊手)
反思:
从这个错误中,要注意以后编写宏的时候一定要注意+上作用域。同时以后再遇到这种报错信息,就要想一想是不是这个原因。