繁体   English   中英

VS2012的异常规范

[英]Exception Specifications on VS2012

我最近更新到了Visual Studio 2012,并且在异常规范方面遇到了一些问题。 我不断收到以下格式的系统文件错误

<some type> function(<some input>) _NOEXCEPT    
{
  <some code>
}

哪里

 #define _NOEXCEPT  throw()

我不太明白为什么会收到错误消息,因为定义了宏并且用法是由Visual Studio Exception Handling定义的。 错误类似于:

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\list(1119): error C2059: syntax error : '{'
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\list(1119): error C2334: unexpected token(s) preceding '{'; skipping apparent function body

上面的“列表”文件的第1118-1121行是:

const_iterator begin() const _NOEXCEPT
    {   // return iterator for beginning of nonmutable sequence
    return (const_iterator(this->_Nextnode(this->_Myhead), this));
    }

错误来自以上路径中的“ list”和“ xtree”。 我尝试更改上面链接中指定的“ \\ EH”标志,但这无济于事。

关于什么可能导致此的任何想法?

编辑:添加预处理程序文件摘录。

const_iterator begin() const {printf("ERROR: %s\n     in file %s at line %d\n", ,"C:\\Program Files (x86)\\Microsoft Visual Studio 11.0\\VC\\include\\list",1118); throw(1);}
    {   
    return (const_iterator(this->_Nextnode(this->_Myhead), this));
    }

不知道我应该用这个文件做什么,但是这里是示例代码。

编辑

事实证明,有一个带有宏的全局头

#define throw(message) {printf("ERROR: %s\n in file %s at line %d\n", message,__FILE__,__LINE__); throw(1);}

造成了所有问题。 取消定义宏会使事情顺利进行。


我放弃了尝试解决这个问题的方法。作为解决方案,我重新定义了_NOEXCEPT宏以不使用throw,即

#define _NOEXCEPT  

在导致问题的头文件中。

我认为这不会成为主要问题,因为所有编译器都会忽略异常规范,并且在c ++ 11中已弃用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM