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

原创 2012年03月24日 15:49:11
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

 

error C2712: Cannot use __try in functions that require object unwinding

用 /GX- 开关
  • swanabin
  • swanabin
  • 2013年09月28日 10:35
  • 2249

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

解决方案: 单独把try里面的代码封装成一个函数,然后再在try里面调用
  • swanabin
  • swanabin
  • 2015年01月13日 10:58
  • 4299

编译错误:无法在要求对象展开的函数中使用 __try

MSDN说这是个编译器错误C2712 无法在要求对象展开的函数中使用 __try 看这个不明白又找到了一个网页按照第二种方法编译通过。网址:    http://www.vcerror...
  • CKRGD
  • CKRGD
  • 2015年04月29日 11:23
  • 1841

使用了非标准扩展:“xxx”使用 SEH,并且“xxx”有析构函数

使用了非标准扩展:“xxx”使用 SEH,并且“xxx”有析构函数 0条评论 如果一个函数内使用了异常处理机制, VC 编译器在...
  • jiangqin115
  • jiangqin115
  • 2015年12月12日 19:49
  • 1030

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

测试环境:WIN7 X64 + VS2010 + MFC 在OnInitDialog中测试代码如下: _try { char *pDst = NULL; memset(pDst, 0, 25...
  • friendan
  • friendan
  • 2015年09月06日 23:38
  • 3374

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

bool WindowContainer::GotoMainPage(bool bDestroyCurWndPage/* = true*/) { bool bResult = false; ...
  • chenyujing1234
  • chenyujing1234
  • 2012年03月24日 15:49
  • 12725

error C2712: Cannot use __try in functions that require object unwinding

原文:http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/42985583-36fb-4e14-8642-bd837aac0727 ...
  • wag2765
  • wag2765
  • 2016年01月25日 16:36
  • 241

VS2010 常见错误

原文地址:http://blog.csdn.net/l5201314131413141314/article/details/8863081 1、error C4430: missing type ...
  • lcalqf
  • lcalqf
  • 2015年03月20日 11:12
  • 4023

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

 error C2712: 无法在要求对象展开的函数中使用 __try 分类: 编译出错/VC6/VS2005/VS2008/VS2010 2012-03-24 15:49 2690...
  • lionzl
  • lionzl
  • 2013年12月08日 18:06
  • 768
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:error C2712: 无法在要求对象展开的函数中使用 __try
举报原因:
原因补充:

(最多只允许输入30个字)