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