关闭

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

标签: cexceptioniterator编译器
11929人阅读 评论(0) 收藏 举报
分类:
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 /c
struct 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

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2370826次
    • 积分:24306
    • 等级:
    • 排名:第259名
    • 原创:243篇
    • 转载:265篇
    • 译文:2篇
    • 评论:475条
    最新评论