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: 无法在要求对象展开的函数中使用 __try

测试环境:WIN7 X64 + VS2010 + MFC 在OnInitDialog中测试代码如下: _try { char *pDst = NULL; memset(pDst, 0, 25...

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)的源代码,在...

Objective-C中使用@try处理异常,防止程序崩溃

这一篇我们主要来讲讲Objective-C中的@try块来处理异常,与@try结合一起的有@catch、@finally。文章非常基础,希望对初学者有所帮助。 在我们编写Objective-C程...

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

转载自:http://www.itivy.com/iphone/archive/2011/12/20/iphone-objective-c-try-catch-statement.html ...

【IOS 开发学习总结-OC-22】★objective-c——使用@try 处理异常

objective-c 的异常机制通常只作为一种程序调试,捕捉机制。 我们先来测试下OC的异常机制。示例程序: FKEatable.h#import // 定义协议 @protocol FKEat...

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

转载自:http://www.itivy.com/iphone/archive/2011/12/20/iphone-objective-c-try-catch-statement.html ...

[C/C++标准库]_[初级]_[函数对象functor的使用]

Functor 场景: 1. functor其实就是
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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