编译器警告(等级 1)C4462
无法确定此类型的 GUID。 程序可能在运行时失败。
当作为某个 Windows 运行时应用程序或组件的类型参数之一的公共 TypedEventHandler
具有对封闭类的引用时,该应用程序或组件中将出现警告 C4462。
此警告会自动升级为错误。 若要修改此行为,请使用 #pragma 警告。 例如,若要将 C4462 设置为级别 4 警告问题,请将此行添加到源代码文件中:
#pragma warning(4:4462)
示例
此示例生成警告 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();
}
有两种解决此错误的方法。 一种方法(如下一个示例所示)是为事件提供内部可访问性,使它对同一可执行文件中的代码可用,而不对其他 Windows 运行时组件中的代码可用。
internal:
event Windows::Foundation::TypedEventHandler<R ^, EventArgs^>^ e;
如果事件必须是公共的,则可以使用另一个解决方法,即通过默认接口公开它:
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;
};
仅当 Windows::Foundation::TypedEventHandler<R^, EventArgs^>^
类型是从另一个组件访问时,才使用该类型的 GUID。 在采用第一个解决方法后,该类型只能在自己的组件中进行访问,因而可以解决问题。 否则,编译器不得不假定出现最坏的情况并发出警告。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈