1

我正在做从 windows 到 wince 的转换工作。对于使用 iostream,我选择STLport5.2.1. 我在vs2008上收到编译错误:

am files (x86)\windows ce tools\wce500\athenapbws\mfc\include\wcealt.h(248) : error C2084: function 'void *operator new(size_t,void *)' has a body

2> D:\Program Files (x86)\Windows CE Tools\wce500\AthenaPBWS\include\ARMV4I../Armv4i/new(71) :参见之前的“新”定义

2>d:\program files (x86)\windows ce tools\wce500\athenapbws\mfc\include\wcealt.h(254) : error C2084: function 'void operator delete(void *,void *)' has a body

2> D:\Program Files (x86)\Windows CE Tools\wce500\AthenaPBWS\include\ARMV4I../Armv4i/new(73) :参见之前的“删除”定义

2>Util1.cpp 2>D:\Program Files (x86)\Windows CE Tools\wce500\AthenaPBWS\include\ARMV4I../Armv4i/new(72) : error C2084: function 'void *operator new(size_t,void *)' 已经有一个主体

2> d:\program files (x86)\windows ce tools\wce500\athenapbws\mfc\include\wcealt.h(247) : 参见之前的“新”定义

2>D:\Program Files (x86)\Windows CE Tools\wce500\AthenaPBWS\include\ARMV4I../Armv4i/new(74) : error C2084: function 'void operator delete(void *,void *)' already has身体

2> d:\program files (x86)\windows ce tools\wce500\athenapbws\mfc\include\wcealt.h(253) : 参见之前的“删除”定义

你怎么能解决这个错误?

4

2 回答 2

1

您必须在配置 bat 中添加字符串 --rtl-static。这对我很有效。dll 的输出名称将是 stlport-x.5.2.dll

编辑

我发现了这个问题。我能够使用 /MD(DLL 多线程)构建 stlport,请查看 http://social.msdn.microsoft.com/Forums/en-US/vssmartdevicesnative/thread/fbae6f2a-4fc0-4610-a4b7-3d3d6bc6ac7e/

于 2013-04-04T14:55:16.740 回答
1

看起来你应该定义 __PLACEMENT_NEW_INLINE - 如果尚未定义,它的作用如下:

/* 使用 MFCCE 和一起使用时的解决方法:MFCCE 的 wcealt.h 没有
 * 在定义 operator new 之前检查 __PLACEMENT_NEW_INLINE,所以当
 * 之前定义了operatore,会报C2084错误:
 *“函数'void *__cdecl operator new(unsigned int,void *)'已经有一个主体”。
 */
# ifdef _STLP_USE_MFC
# 定义 __PLACEMENT_NEW_INLINE
# 万一
于 2012-06-20T15:27:19.873 回答