Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
'function': tidak ditemukan fungsi kelebihan beban yang cocok
Komentar
Pengkompilasi tidak dapat menemukan fungsi kelebihan beban yang cocok dengan fungsi yang ditentukan. Tidak ada fungsi yang ditemukan yang mengambil parameter yang cocok, atau tidak ada fungsi yang cocok yang memiliki aksesibilitas yang diperlukan dalam konteks.
Saat digunakan oleh kontainer atau algoritma pustaka standar tertentu, jenis Anda harus menyediakan anggota yang dapat diakses atau fungsi teman yang memenuhi persyaratan kontainer atau algoritma. Misalnya, jenis iterator Anda harus berasal dari std::iterator<>. Operasi perbandingan atau penggunaan operator lain pada jenis elemen kontainer mungkin mengharuskan jenis tersebut dianggap sebagai operand sebelah kiri dan kanan. Penggunaan jenis sebagai operand tangan kanan dapat memerlukan implementasi operator sebagai fungsi non-anggota dari jenis tersebut.
Contoh
Versi pengkompilasi sebelum Visual Studio 2017 tidak melakukan pemeriksaan akses pada nama yang memenuhi syarat dalam beberapa konteks templat. Hal ini dapat mengganggu perilaku SFINAE yang diharapkan di mana penggantian diperkirakan gagal karena tidak dapat diaksesnya nama. Hal ini berpotensi menyebabkan crash atau perilaku tak terduga saat runtime karena pengkompilasi salah memanggil kelebihan operator yang salah. Pada Visual Studio 2017, kesalahan pengompilasi dimunculkan.
Contoh ini mengkompilasi di Visual Studio 2015 tetapi menimbulkan kesalahan di Visual Studio 2017. Untuk memperbaiki masalah ini, buat anggota parameter templat dapat diakses di mana ia dievaluasi.
#include <type_traits>
template <class T> class S {
// public: // Uncomment this line to fix
typedef typename T type;
};
template <class T, std::enable_if<std::is_integral<typename S<T>::type>::value, T> * = 0>
bool f(T x)
{
return (x == 0);
}
int main()
{
f(10); // C2672: No matching overloaded function found.
}