Freigeben über


Compilerwarnung (Stufe 1) C4462

Ermitteln der GUID des Typs nicht möglich. Das Programm kann zur Laufzeit fehlschlagen.

Warnung C4462 tritt in einer Windows Runtime-App oder - Komponente auf, wenn ein öffentlicher TypedEventHandler als Typparameter einen Verweis auf die übergeordnete Klasse besitzt.

Diese Warnung wird automatisch zu einem Fehler heraufgestuft. Wenn Sie dieses Verhalten ändern möchten, verwenden Sie #pragma Warnung. Wenn Sie z. B. C4462 in ein Warnungsproblem der Ebene 4 umwandeln möchten, fügen Sie diese Zeile ihrer Quellcodedatei hinzu:

#pragma warning(4:4462)

Beispiel

In diesem Beispiel wird die Warnung C4462 generiert:

namespace N
{
    public ref struct EventArgs sealed {};
    public ref struct R sealed
    {
        R() {}
        event Windows::Foundation::TypedEventHandler<R ^, EventArgs^>^ e;
    };
}

[Platform::MTAThread]
int main()
{
    auto x = ref new N::R();
}

Es gibt zwei Möglichkeiten, den Fehler zu umgehen. Eine Möglichkeit besteht, wie im folgenden Beispiel dargestellt, darin, dem Ereignis internen Zugriff zu gewähren und es somit für den Code in derselben ausführbaren Datei verfügbar zu machen, jedoch nicht für den Code in anderen Windows Runtime-Komponenten.

internal:
    event Windows::Foundation::TypedEventHandler<R ^, EventArgs^>^ e;

Wenn das Ereignis öffentlich sein muss, können Sie es mithilfe der anderen Problemumgehung über eine Standardschnittstelle verfügbar machen:

ref struct R;
public interface struct IR{ event Windows::Foundation::TypedEventHandler<R ^, EventArgs^>^ e;};

public ref struct R sealed : [Windows::Foundation::Metadata::Default] IR
{
    R() {}
    virtual event Windows::Foundation::TypedEventHandler<R ^, EventArgs^>^ e;
};

Eine GUID vom Typ Windows::Foundation::TypedEventHandler<R^, EventArgs^>^ wird nur verwendet, wenn eine andere Komponente auf den Typ zugreift. Die erste Problemumgehung funktioniert, da auf sie anschließend nur innerhalb der eigenen Komponente zugegriffen werden kann. Andernfalls muss der Compiler den schlimmsten Fall annehmen und die Warnung ausgeben.