0

最近、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));
    }

このファイルから何を作成すればよいかわかりませんが、サンプル コードを次に示します。

4

1 に答える 1

0

編集

結局のところ、マクロを含むグローバルヘッダーがありました

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

それがすべての問題を引き起こしていました。マクロを未定義にすると、物事がうまく機能します。


私はこれを理解しようとすることをあきらめました...回避策として、throwを使用しないように_NOEXCEPTマクロを再定義しました。

#define _NOEXCEPT  

問題を引き起こしていたヘッダー ファイルで。

すべてのコンパイラが例外仕様を無視し、c++ 11 で非推奨になっているため、大きな問題になるとは思わない

于 2013-09-13T16:25:58.510 に答える