共用方式為


編譯器警告 (層級 1) C4462

無法判斷類型的 GUID。 程式可能在執行階段失敗。

警告 C4462 當公用 TypedEventHandler 的其中一個型別參數做為封入類別的參考時,Windows 執行階段應用程式或元件中就會發生警告 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。 第一個解決方法有效,是因為解決後只能從它自己的元件內存取。 否則,編譯器必須假設最糟情況並發出警告。