error C2712: 无法在要求对象展开的函数中使用 __try

来源:互联网 发布:苹果系统编程语言 编辑:程序博客网 时间:2024/05/05 22:18
bool WindowContainer::GotoMainPage(bool bDestroyCurWndPage/* = true*/){bool bResult = false;LockChilds();__try{ GUIList::iterator it = m_lstWndPage.begin();// 这句话报错消息                 
                   if(it != m_lstWndPage.end() && (*it) != m_pCurPage){ WndPage * pCurPage = m_pCurPage; SwitchToWndPage((WndPage *)*it, 0, 0); bDestroyCurWndPage ? DestroyWndPage(pCurPage) : 0;}}__except(EXCEPTION_EXECUTE_HANDLER){printf("\nWindowContainer::PopWndPage Catch Exception:%x!\n", GetExceptionCode());}UnLockChilds();return bResult;}

 

 

报错内容如下:

1>.\WindowContainer.cpp(576) : error C2712: 无法在要求对象展开的函数中使用 __try

解决方法:

 

 

错误消息

无法在要求对象展开的函数中使用 __try

使用 /EHsc 时,带有结构化异常处理的函数不能具有要求展开(毁坏)的对象。

可能的解决方案:

  • 将要求 SEH 的代码移动到另一个函数中。

  • 重写使用 SEH 的函数以避免使用具有析构函数的局部变量和参数。在构造函数或析构函数中不要使用 SEH。

  • 不使用 /EHsc 进行编译。

示例

如果使用 /clr:pure 进行编译并在 __try 块中声明指针到函数的静态数组,则会发生 C2712 错误。静态成员要求编译器在/clr:pure 下使用动态初始化功能,这意味着 C++ 异常处理。但是,不允许在__try 块中进行 C++ 异常处理。

下面的示例生成 C2712。

 

// C2712.cpp// compile with: /clr:pure /cstruct S1 {   static int smf();   void fnc();};void S1::fnc() {   __try {      static int (*array_1[])() = {smf,};   // C2712      // OK      static int (*array_2[2])();      array_2[0] = smf;    }    __except(0) {}}


参考CSDN:

 http://msdn.microsoft.com/zh-cn/library/xwtb73ad(VS.80).aspx