Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
'functie': geen overeenkomende overbelaste functie gevonden
Opmerkingen
De compiler kan geen overbelaste functie vinden die overeenkomt met de opgegeven functie. Er is geen functie gevonden die overeenkomende parameters gebruikt of dat er geen overeenkomende functie de vereiste toegankelijkheid in de context heeft.
Wanneer deze worden gebruikt door bepaalde standaardbibliotheekcontainers of algoritmen, moeten uw typen toegankelijke leden of vriendfuncties bieden die voldoen aan de vereisten van de container of het algoritme. Uw iteratortypen moeten bijvoorbeeld worden afgeleid van std::iterator<>. Voor vergelijkingsbewerkingen of het gebruik van andere operators op containerelementtypen kan het type worden beschouwd als zowel een linker- als een rechteroperand. Gebruik van het type als een rechteroperand kan vereisen dat de operator wordt geïmplementeerd als een niet-lidfunctie van het type.
Voorbeeld
Versies van de compiler van vóór Visual Studio 2017 voerden geen toegangscontrole uit op gekwalificeerde namen in sommige sjablooncontexten. Dit kan het verwachte SFINAE-gedrag verstoren waarbij de vervanging naar verwachting mislukt vanwege de ontoegankelijkheid van een naam. Dit kan mogelijk een crash of onverwacht gedrag hebben veroorzaakt tijdens runtime omdat de compiler de verkeerde overbelasting van de operator onjuist aanroept. In Visual Studio 2017 wordt er een compilerfout gegenereerd.
Dit voorbeeld compileert in Visual Studio 2015, maar geeft een foutmelding in Visual Studio 2017. U kunt dit probleem oplossen door het lid van de sjabloonparameter toegankelijk te maken waar het wordt geëvalueerd.
#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.
}