編譯器警告 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 預設引數。