共用方式為


編譯器警告 C5037

'member-function':類別範本成員的非正規定義不能有預設引數

備註

範本類別中成員函式的程式碼外部定義不允許預設引數。 編譯程式會在 底下 /permissive發出層級 3 警告,並在 下 /permissive-發出錯誤。

此警告是在Visual Studio 2017 15.3版中引進的。 在 Visual Studio 2017 15.3 版之前,在沒有警告的情況下編譯的程式代碼現在可以產生 C5037。 如需如何停用特定編譯程式版本或更新版本中導入的警告的資訊,請參閱 編譯程式版本的編譯程式警告。 您可以使用編譯程式 /wd:5037 選項或 #pragma warning(disable:5037)來停用它。

範例

在舊版的 Visual Studio 中,下列語式錯誤的程式碼可能會導致執行階段當機。 Visual Studio 2017 15.3 版會產生警告 C5037:

// C5037.cpp
// compile using: cl /c /permissive- C5037.cpp
template <typename T>
struct A {
    T f(T t, bool b = false);
};

template <typename T>
T A<T>::f(T t, bool b = false) // C5037: 'A<T>::f': an out-of-line definition of a member of a class template cannot have default arguments
{
    // ...
}

若要修正錯誤,請移除 = false 預設引數。