首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >生成C2252时log4cxx错误

生成C2252时log4cxx错误
EN

Stack Overflow用户
提问于 2013-08-21 18:58:50
回答 3查看 2.5K关注 0票数 1

在Visual中构建,APR 1.4.8 -UTIL 1.5.2 Log4cxx 0.10

运行配置和配置-apr

然后打开VS,得到111个C2252错误(来自宏):

代码语言:javascript
运行
复制
//
//   pointer and list definition macros when building DLL using VC
//
#if defined(_MSC_VER) && !defined(LOG4CXX_STATIC) && defined(LOG4CXX)
#define LOG4CXX_PTR_DEF(T) \
template class LOG4CXX_EXPORT log4cxx::helpers::ObjectPtrT<T>; \
typedef log4cxx::helpers::ObjectPtrT<T> T##Ptr
#define LOG4CXX_LIST_DEF(N, T) \
template class LOG4CXX_EXPORT std::allocator<T>; \
template class LOG4CXX_EXPORT std::vector<T>; \
typedef std::vector<T> N

我该怎么处理这个?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-21 21:45:42

看起来,删除以"template“开头的2行解决了这个问题。

删除以下内容:

代码语言:javascript
运行
复制
template class LOG4CXX_EXPORT std::allocator<T>; \
template class LOG4CXX_EXPORT std::vector<T>; \
票数 2
EN

Stack Overflow用户

发布于 2014-02-04 10:10:44

看看这个bug报告:LOGCXX-366

解决办法的总结:

编辑/src/main/cpp/stringhelper.cpp,添加:

代码语言:javascript
运行
复制
#include <iterator>

编辑/src/main/include/log4cxx/log4cxx.hw,删除以下行:

代码语言:javascript
运行
复制
template class LOG4CXX_EXPORT std::allocator<T>; \
template class LOG4CXX_EXPORT std::vector<T>; \

extern template class LOG4CXX_EXPORT std::allocator<T>; \
extern template class LOG4CXX_EXPORT std::vector<T>; \
票数 1
EN

Stack Overflow用户

发布于 2016-04-20 08:29:49

此错误是由于VC++中的一个可以处理的错误造成的。

  1. 将所有宏移到(以上)它们所在的类之外。LOG4CXX_LIST_DEF宏用于定义类。在错误中报告的所有宏C2252都需要移出任何类。这也可能包括在宏中使用的移动定义。
  2. 接下来,将所有LoggingEvent::KeySet更改为KeySet (不再嵌套在父类中)

有关如何在Windows上编译Log4cxx的完整答案,请参阅我在这里的完整答案:https://stackoverflow.com/a/36737721/3637582

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18365538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档