【问题标题】:Wince 5.0 using STLport void *operator new(size_t,void *)' already has a bodyWince 5.0 使用 STLport void *operator new(size_t,void *)' 已经有一个主体
【发布时间】:2012-06-20 05:10:27
【问题描述】:

我正在做从 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) : 错误 C2084: function 'void operator delete(void *,void *)' already有身体

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) : 错误 C2084: 函数 '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 *) ' 已经有实体了

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

你如何解决这个错误?

【问题讨论】:

  • 在为 Windows CE 5.0 编译时,您需要 VS2005 或 VS2008。两者都带有用于 Windows CE 的 STL 版本。当你只需要 iostream 的时候为什么不使用这个 STL 实现呢?

标签: visual-c++ windows-ce stlport


【解决方案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 # 万一

【讨论】:

  • 我试图在 中定义或取消定义 __PLACEMENT_NEW_INLINE 但似乎无效。
  • 事实上,当我在 wcealt.h 中添加 #ifdef _STLP_USE_MFC #define __PLACEMENT_NEW_INLINE #endif 时,编译错误减少到 2,并且 中的相应代码变为灰色。为什么编译器仍然告诉我错误 C2084: function 'void *operator new(size_t,void *)' already has a body
  • 你不应该修改 wcealt.h,在包含任何 stl 头文件之前放置任何 stlport 配置宏,或者最好放在 stlport\stl\config\user_config.h
  • 对不起,它没有帮助。你能告诉我更多细节吗?
【解决方案2】:

您必须在配置 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/

【讨论】:

    猜你喜欢
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    • 2014-09-17
    • 1970-01-01
    • 2021-07-28
    • 2015-04-25
    • 2014-09-13
    相关资源
    最近更新 更多