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

 

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

解决方案: 单独把try里面的代码封装成一个函数,然后再在try里面调用

[新书]《Android和PHP开发最佳实践》

经过一年多的精心准备,《Android PHP 最佳实践》一书终于出版了!这是国内第一本同时讲述Android客户端开发和PHP服务端开发的经典著作,本书不仅能让你掌握Android客户端和PHP服务...
  • shagoo
  • shagoo
  • 2012年12月26日 09:52
  • 18952

vs C# 代码实现执行单元测试用例

基于NET FrameWork IDE Mstest命令实现。 测试DLL文件必须为测试用例类,要有[testclass][testmethod]等标识。 /// /// 执行单元测...

try catch 错误处理 也可以用于解决浏览器兼容性问题 Error对象

script> try{ // var abc = {}; //这里存放可能出现错误的代码 // d; //error ...

VS2013使用scanf、gets及字符串函数编译报错error C4996: 'scanf': This function or variable may be unsafe. 原因及解决方案

VS2013使用scanf、gets及字符串函数编译报错 error C4996: 'scanf': This function or variable may be unsafe. 的原因及解决方...

error C4996: 'scanf': This function or variable may be unsafe.Visual Studio系列编译器使用scanf函数报错

在使用Visual Studio 系列编译器使用scanf函数是,是否需到下面这句话呢?error C4996: ‘scanf’: This function or variable may be u...

fatal error C1047: 对象或库文件“EDLib.lib”是使用比创建其他对象所用编译器旧的编译器创建的

fatal error C1047: 对象或库文件“EDLib.lib”是使用比创建其他对象所用编译器旧的编译器创建的;请重新生成旧的对象和库 前几天在网上下载了一个算法(EDPF)的源代码,在...

【error C2660: “GetDlgItem”: 函数不接受 1 个参数】

MFC编程时,遇到如下错误: error C2660: “GetDlgItem”: 函数不接受 1 个参数 (1)、CWindow::GetDlgItem 函数原型:HWND...

VS2015 scanf 函数报错 error C4996: 'scanf'

错误提示:error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. ...
  • jh0703
  • jh0703
  • 2015年08月21日 00:18
  • 11934

Objective-C中使用@try处理异常

转载自:http://www.itivy.com/iphone/archive/2011/12/20/iphone-objective-c-try-catch-statement.html ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:error C2712: 无法在要求对象展开的函数中使用 __try
举报原因:
原因补充:

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