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í.