Share via


Upozornění kompilátoru (úroveň 1) C4462

Nelze určit identifikátor GUID tohoto typu. Program může při běhu selhat.

Upozornění C4462 se vyskytuje v aplikaci nebo komponentě prostředí Windows Runtime, pokud má veřejný TypedEventHandler jako jeden z parametrů typu odkaz na nadřazenou třídu.

Toto upozornění se automaticky zvýší na chybu. Pokud chcete toto chování upravit, použijte #pragma upozornění. Pokud například chcete, aby se C4462 dostal do problému s upozorněním na úroveň 4, přidejte tento řádek do souboru zdrojového kódu:

#pragma warning(4:4462)

Příklad

Tato ukázka vygeneruje upozornění C4462:

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();
}

Tuto chybu lze obejít dvěma způsoby. Jeden z nich, uvedený v následujícím příkladu, spočívá v tom, že události udělíte interní přístupnost, aby byla dostupná kódu ve stejném spustitelném souboru, ale nikoli kódu v jiných součástech prostředí Windows Runtime.

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

Pokud musí být událost veřejná, můžete použít jiné zástupné řešení, a sice ji zpřístupnit prostřednictvím výchozího rozhraní:

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;
};

Identifikátor GUID typu Windows::Foundation::TypedEventHandler<R^, EventArgs^>^ se používá pouze v případech, kdy je typ přístupný z jiné komponenty. První zástupné řešení funguje, protože k němu lze získat přístup pouze v rámci vlastní komponenty. V opačném případě musí kompilátor předpokládat nejhorší případ a vydat upozornění.