【问题】log4cplus升级 错误no matching function for call to ‘log4cplus::Appender::setLayout(std::auto_ptr...

1 问题

在升级项目过程中,编译log4cplus时报错:

 错误:no matching function for call to ‘log4cplus::Appender::setLayout(std::auto_ptr<log4cplus::Layout>&)1>    pRollingFileAppender->setLayout(pPatternLayout);            

2 解决方法

pRollingFileAppender->setLayout(std::move(pPatternLayoutCons));

3 详细代码

	// 设置日志路径
	g_LogPathPref = "/Logs/" + strLogName;
	std::string strLogPath = g_LogPathPref + ".log";

	// 定义1个控制台的Appender,1个文件Appender   
	SharedAppenderPtr pConsoleAppender(new ConsoleAppender());   
	SharedAppenderPtr pRollingFileAppender(new RollingFileAppender(strLogPath, nLogSize, 10, true, true));  
  
	// 定义一个PatternLayout,并绑定到 pRollingFileAppender   
	std::unique_ptr<Layout> pPatternLayout(new PatternLayout("$$[%D{%Y-%m-%d %H:%M:%S}]~[\%-5p]~%m##%n"));
	pRollingFileAppender->setLayout(std::move(pPatternLayout));  

	// 定义一个PatternLayout,并绑定到 pConsoleAppender   
	std::unique_ptr<Layout> pPatternLayoutCons(new PatternLayout("[%D{%H:%M:%S}] [\%-5p] %m%n"));
	pConsoleAppender->setLayout(std::move(pPatternLayoutCons));   

	// 定义Logger   
	g_Logger = Logger::getInstance("DpLogger");      
	g_Logger.setLogLevel(getLevel(strLogLevel));

	// 将需要关联Logger的Appender添加到Logger上   
	g_Logger.addAppender(pConsoleAppender);		//控制台     
	g_Logger.addAppender(pRollingFileAppender);  //日志文件

4 备注

在定义智能指针时,我们使用的是unique_ptr ,之前的版本使用的是std::auto_ptr
具体的比较参考文章:C++ | auto_ptr与unique_ptr 。目前c++17已经弃用了auto_ptr,方便之后的在升级,更新使用unique_ptr。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值