6

我遇到了一段时间error C2712: Cannot use __try in functions that require object unwinding的问题,在缩小问题范围后,我得到了一个非常简单的代码,我不明白为什么它会导致这个错误。我在 Windows 下使用 Visual Studio。

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

我使用__try/__except而不使用的原因try/catch是因为我想捕获所有错误,并且不希望程序在任何情况下崩溃,包括例如除以 0,try-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
4

1 回答 1

7

这是解决方案。有关更多详细信息,请阅读编译器错误 C2712

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

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

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

额外说明static如果没有使用您的结构(myStruct)的声明,则不需要。

于 2014-07-15T01:04:16.847 回答