Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 构建log4cxx时发生C2252错误_C++_Visual Studio 2012_Build_Log4cxx - Fatal编程技术网

C++ 构建log4cxx时发生C2252错误

C++ 构建log4cxx时发生C2252错误,c++,visual-studio-2012,build,log4cxx,C++,Visual Studio 2012,Build,Log4cxx,Visual Studio 2012中的建筑, 4月1日4月8日 APR-UTIL 1.5.2 Log4cxx 0.10 运行配置和配置apr 然后在VS中打开,得到111个C2252错误(来自宏): // //使用VC构建DLL时的指针和列表定义宏 // #如果定义了(\u MSC\u VER)&&!已定义(LOG4CXX_静态)和已定义(LOG4CXX) #定义LOG4CXX_PTR_DEF(T)\ 模板类LOG4CXX_导出LOG4CXX::helpers::ObjectPtrT\ typ

Visual Studio 2012中的建筑, 4月1日4月8日 APR-UTIL 1.5.2 Log4cxx 0.10

运行配置和配置apr

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

//
//使用VC构建DLL时的指针和列表定义宏
//
#如果定义了(\u MSC\u VER)&&!已定义(LOG4CXX_静态)和已定义(LOG4CXX)
#定义LOG4CXX_PTR_DEF(T)\
模板类LOG4CXX_导出LOG4CXX::helpers::ObjectPtrT\
typedef log4cxx::helpers::ObjectPtrT T##Ptr
#定义LOG4CXX_列表_DEF(N,T)\
模板类LOG4CXX_导出标准::分配器\
模板类LOG4CXX_导出std::vector\
typedef std::vector N

你知道我该怎么做吗

删除以“template”开头的两行可以解决这个问题

删除此项:

template class LOG4CXX_EXPORT std::allocator<T>; \
template class LOG4CXX_EXPORT std::vector<T>; \
模板类LOG4CXX\u导出标准::分配器\
模板类LOG4CXX_导出std::vector\

查看此错误报告:

解决方案概述:

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

#include <iterator>
#包括
编辑/src/main/include/log4cxx/log4cxx.hw, 删除以下行:

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>; \
模板类LOG4CXX\u导出标准::分配器\
模板类LOG4CXX_导出std::vector\
外部模板类LOG4CXX_导出标准::分配器\
外部模板类LOG4CXX_导出标准::向量\
这个错误是由于VC++中的一个bug引起的,可以解决这个bug

  • 将所有宏移到它们所在的类之外(上方)。 LOG4CXX_LIST_DEF宏用于定义类。所有宏 报告的错误C2252将需要移出任何类。这 还可能包括宏中使用的移动定义
  • 接下来,将所有LoggingEvent::KeySet更改为KeySet(这不再是 嵌套在父类中)
  • 有关如何在Visual Studio 2013中在 Windows操作系统在此处查看我的完整答案:


    将显示错误C2252 LOGCXX-366上的链接补丁建议也添加“#include”。这篇文章帮助我摆脱了流沙。。
    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>; \