Megosztás a következőn keresztül:


C2672 fordítási hiba

'függvény': nem található egyező túlterhelt függvény

Megjegyzések

A fordító nem talált túlterhelt függvényt, amely megfelel a megadott függvénynek. Nem található olyan függvény, amely megfeleltetési paramétereket vesz igénybe, vagy egyetlen egyező függvény sem rendelkezik a szükséges akadálymentességgel a környezetben.

Ha bizonyos szabványos könyvtárak tárolói vagy algoritmusai használják, a típusoknak olyan hozzáférhető tagokat vagy barátfüggvényeket kell biztosítaniuk, amelyek megfelelnek a tároló vagy algoritmus követelményeinek. Az iterátortípusoknak például a következőből std::iterator<>kell származnia: . A tárolóelem-típusok összehasonlító műveletei vagy más operátorok használata esetén a típus bal és jobb oldali operandusnak is tekinthető. A típus jobb oldali operandusként való használata megkövetelheti az operátor implementálását a típus nem tagfüggvényeként.

példa

A Fordító Visual Studio 2017 előtti verziói egyes sablonkörnyezetekben nem végeztek hozzáférés-ellenőrzést a minősített neveken. Ez zavarhatja az SFINAE várt viselkedését, ha a helyettesítés a név elérhetetlensége miatt várhatóan meghiúsul. Ez futásidőben összeomlást vagy váratlan viselkedést okozhatott, mert a fordító helytelenül hívja meg az operátor helytelen túlterhelését. A Visual Studio 2017-ben egy fordítóhiba lett jelezve.

Ez a példa a Visual Studio 2015-ben készült, de hibát jelez a Visual Studio 2017-ben. A kiértékelés helyén tegye hozzáférhetővé a sablonparaméter tagját a probléma megoldásához.

#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.
}