Freigeben über


Compilerfehler C3068

'Funktion' : Eine "nackte" Funktion kann keine Objekte enthalten, die eine Abwickelung erfordern, wenn eine C++-Ausnahme aufgetreten ist.

Der Compiler konnte das Stapelabspannen auf einer nackten Funktion nicht ausführen, die eine Ausnahme ausgelöst hat, da ein temporäres Objekt in der Funktion erstellt wurde und die C++-Ausnahmebehandlung (/EHsc) angegeben wurde.

Führen Sie zum Beheben dieses Fehlers mindestens eine der folgenden Aktionen aus:

  • Kompilieren Sie nicht mit /EHsc.

  • Markieren Sie die Funktion nicht als naked.

  • Erstellen Sie kein temporäres Objekt in der Funktion.

Wenn eine Funktion ein temporäres Objekt im Stapel erstellt, wenn die Funktion eine Ausnahme auslöst und die C++-Ausnahmebehandlung aktiviert ist, bereinigt der Compiler den Stapel, wenn eine Ausnahme ausgelöst wird.

Wenn eine Ausnahme ausgelöst wird, wird vom Compiler generierter Code, der als Prolog und Epilog bezeichnet wird und nicht in einer nackten Funktion vorhanden ist, für eine Funktion ausgeführt.

Beispiel

Im folgenden Beispiel wird C3068 generiert:

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

void b(A){}

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