非常简单的代码,并得到错误C2712,无法理解为什么

时间:2014-07-15 00:55:35

标签: c++ visual-studio try-except

我在使用error C2712: Cannot use __try in functions that require object unwinding时遇到了一段时间的麻烦,在缩小问题后,我留下了一个非常简单的代码,我无法理解为什么它会导致此错误。我在windows下使用Visual Studio。

我正在使用/ EHa进行编译(我不使用/ EHsc)

我使用__try/__except而不是try/catch的原因是因为我想捕获所有错误,并且不希望程序在任何情况下崩溃,包括例如除以0,尝试-catch没有赶上。

#include <string>
static struct myStruct
{
    static std::string foo() {return "abc";}
};

int main ()
{
    myStruct::foo();

    __try 
    { }
    __except (true)
    { }

    return 0;
}

输出:

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

1 个答案:

答案 0 :(得分:7)

这是解决方案。有关详细信息,请参阅Compiler Error C2712

#include <string>
struct myStruct
{
    static std::string foo() {return "abc";}
};

void koo()
{
    __try 
    { }
    __except (true)
    { }
}

int main ()
{
    myStruct::foo();   
    koo();
    return 0;
}

额外注意:如果没有使用您的结构(myStruct)声明,则无需static