log4cxx,vs2013/vs2010编译 c2252错误

换编译器编译和使用log4cxx时遇到c2252错误

error C2252: an explicit instantiation of a template can only occur at namespace scope

搜索了一下解决方案,在log4cxx邮件列表有如下关于该bug解决方案的描述:

Hi Cory,

This is how I did it:

1. Move all those LOG4CXX_LIST_DEF macros before the class definition.

in telnetappender.h you will also need to move the typedef that precedes this
macro.

2. If the compiler complains about KeySet not being member of LoggingEvent,
just remove the scope (since we moved the type to outside the class in the
previous step, these types no longer are inside the class)
ex:
change: LoggingEvent::KeySet set;
to: KeySet set;

3. If the compiler complains about insert_iterator not being in the namespace
std, add
#include <iterator>
to the include section of the source file

4. For some reason the VS2010 converter ‘forgot‘ to reference the lib files
from apr,apr-util and xml, so i had to add them manually.

Hope it helps,

Daniel

我采取了一个比较简单粗暴的方式解决这个问题:在loggingevent.h中用

typedef std::vector<LogString> KeySet;

替换

//LOG4CXX_LIST_DEF(KeySet, LogString);

				
时间: 2024-07-30 13:48:44

log4cxx,vs2013/vs2010编译 c2252错误的相关文章

VS2010编译错误:是否忘记了向源中添加“#include &quot;stdafx.h

VS2010编译错误:是否忘记了向源中添加“#include "stdafx.h 编译提示:fatal error C1010: 在查找预编译头时遇到意外的文件结尾.是否忘记了向源中添加“#include "stdafx.h"”? 错误分析:此错误发生的原因是编译器在寻找预编译指示头文件(默认#include "stdafx.h")时,文件未预期结束.没有找到预编译指示信息的头文件"stdafx.h".    (因为工程中的每个cpp文

多媒体开发之--- live555 vs2010/vs2013下编译,使用,测试

Ⅰ live555简介 Live555 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP.RTSP.SIP等的支持.Live555实现了对多种音视频编码格式的音视频数据的流化.接收和处理等支持,包括MPEG.H.263+.DV.JPEG视频和多种音频编码.同时由于良好的设计,Live555非常容易扩展对其他格式的支持.目前,Live555已经被用于多款播放器的流媒体播放功能的实现,如VLC(VideoLan).MPlayer. 该项目的源代码包括

windows下用vs2010编译ffmpeg

转载自;http://q1q2q3q4q5q6ln.blog.163.com/blog/static/500794332014666536283/ (注意:请务必先阅读:七,后记补充:) ffmpeg是一个开源的多媒体库,使用非常广泛.在linux下编译ffmpeg非常简单,而在Windows下编译就不是那么容易了.一般在windows下使用MinGW的gcc toolchain进行编译,这样的话,因为ffmpeg的导出函数均是C风格,因而gcc编译的lib可以被vs链接.但是gcc的debug

使用VS2010编译MongoDB C++驱动详解

最近为了解决IM消息记录的高速度写入.多文档类型支持的需求,决定使用MongoDB来解决. 考虑到MongoDB对VS版本要求较高,与我现有的VS版本不兼容,在leveldb.ssdb.redis.hbase等NoSQL中转了一圈,最后还是选择了MongoDB,应了那句话:没有最好的,只有最合适的. MongoDB由于使用了C++的新特性,官方建议使用VS2013来编译,最低要求VS2010. MongoDB C++驱动编译过程较为复杂,官方也没有提供编译好的驱动包,网上的资料编译版本都比较老了

vs2010 编译多个project问题

使用VS2010 编译从vc6.0复制过来的原project文件源代码.提示错误非常多.感觉无从下手.非常多原始的函数和API參数都提示类型 错误或者不兼容. 百度一下.第一个问题: vc6.0使用ASIIC字符.而VS2010默认选项使用unicode. 在project上面右键属性,把默认字符集改动为 "No Set",例如以下图所看到的 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbXljb29sbWU1/font/5a6L5L2T/

亲测VS2010纯静态编译QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序(图文并茂,非常详细)

下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip,不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0-vs2010.exe,这些版本都只是动态编译的,不是我们所需要的.只有用源码包才能做真正的纯静态编译,如果用Qt官网已编译的标准库.exe文件进行编译,有可能出现各种错误,而且编译后的文件巨大,我当时就在这里绕了很大的弯子,请童鞋们注意啦!!可能有些老鸟会笑话,但我本着最严肃的态度告诉菜鸟们,上网查

vs2010 编译mosquitto win32版本,开启websockets,实现消息推送

前言:因为之前没有怎么碰vs,只搞过cygwin,而cygwin上搞了好久都搞不定,以至于重新整理思路,这window上的版本应该怎么去编译.一直不知道怎么搞,只能边看其他教程,边自己搞着,连续几天下了班就可以研究编译,特别是在开启websockets的时候,加上libwebsockets库,对于小白来说,特别痛苦.也罢,最后也成功编译. 编译的电脑:MacBook Pro 虚拟机win7,64bit,1.5G的内存 参考:http://blog.csdn.net/Netown_Ethereal

VELT-0.1.5开发:在vs2013下编译gdb

VELT的全称是Visual EmbedLinuxTools,它是一个visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序的开发(包括编译和调试),也可以进行uboot和linux内核的编译,并根据编译时的错误信息正确定位到源码.目前的版本是0.1.4,仅支持vs2013.此插件可以在CSDN下载频道下载(http://download.csdn.net/detail/lights_joy/8429771),

vs2010编译出的exe“应用程序无法正常启动(0xc0150002)”

今天编译出一个使用ogre1.6.5动态库的应用程序,启动时报"应用程序无法正常启动(0xc0150002)"的错误提示. 编译环境是Win10+VS2010.这个错误可以在Windows 日志中查看到详细信息(计算机--管理--事件查看器--Windows日志--应用程序). 错误原因是:ogremain连接两个旧版本的lib库(可能是vs2005编译出的).因此分别找到对应库的源码,在vs2010环境下重新编译出类库,再进行链接. 再次编译OgreMain.dll时又出现一个问题: