Bagikan melalui


Peringatan Pengompilasi C5037

'member-function': definisi di luar baris dari anggota templat kelas tidak dapat memiliki argumen default

Keterangan

Argumen default tidak diperbolehkan pada definisi fungsi anggota di luar baris di kelas template. Pengkompilasi mengeluarkan peringatan tingkat 3 di bawah /permissive, dan kesalahan di bawah /permissive-.

Peringatan ini diperkenalkan di Visual Studio 2017 versi 15.3. Kode yang dikompilasi tanpa peringatan dalam versi pengkompilasi sebelum Visual Studio 2017 versi 15.3 sekarang dapat menghasilkan C5037. Untuk informasi tentang cara menonaktifkan peringatan yang diperkenalkan dalam versi pengompilasi tertentu atau yang lebih baru, lihat Peringatan pengompilasi berdasarkan versi kompilator. Anda dapat menonaktifkannya dengan menggunakan /wd:5037 opsi pengkompilasi atau #pragma warning(disable:5037).

Contoh

Dalam versi Visual Studio sebelumnya, kode yang tidak terbentuk berikut berpotensi menyebabkan crash runtime. Visual Studio 2017 versi 15.3 menghasilkan peringatan 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
{
    // ...
}

Untuk memperbaiki kesalahan, hapus argumen = false default.