Поделиться через


Ошибка компилятора C3068

Function: функция "голая" не может содержать объекты, требующие отмены при возникновении исключения C++

Компилятору не удалось выполнить очистку стека в голой функции, которая вызвала исключение, так как временный объект был создан в функции и обработке исключений C++ (/EHsc).

Чтобы устранить эту ошибку, выполните по крайней мере одно из следующих действий:

  • Не компилируйте с помощью /EHsc.

  • Не помечайте функцию как naked.

  • Не создавайте временный объект в функции.

Если функция создает временный объект в стеке, если функция создает исключение и если включена обработка исключений C++, компилятор очищает стек при возникновении исключения.

При возникновении исключения компилятор создал код, называемый прологом и эпилогом, и которые не присутствуют в голой функции, выполняются для функции.

Пример

Следующий пример приводит к возникновению ошибки C3068:

// C3068.cpp
// compile with: /EHsc
// processor: x86
class A {
public:
   A(){}
   ~A(){}
};

void b(A){}

__declspec(naked) void c() {
   b(A());   // C3068
};