다음을 통해 공유


컴파일러 오류 C2893

함수 템플릿 '템플릿 이름'을 특수화하지 못했습니다.

컴파일러가 함수 템플릿을 특수화하지 못했습니다. 이 오류의 원인은 여러 가지가 있을 수 있습니다.

일반적으로 C2893 오류를 해결하는 방법은 함수의 서명을 검토하고 모든 형식을 인스턴스화할 수 있는지 확인하는 것입니다.

예시

C2893은 '의 템플릿 매개 변수 T 가 추론되지만 std::map<int,int> std::map<int,int>멤버 data_type 가 없으므로 발생f합니다(T::data_type.로 인스턴스화T = std::map<int,int>할 수 없음). 다음 샘플에서는 C2893을 생성합니다.

// C2893.cpp
// compile with: /c /EHsc
#include<map>
using namespace std;
class MyClass {};

template<class T>
inline typename T::data_type
// try the following line instead
// inline typename  T::mapped_type
f(T const& p1, MyClass const& p2);

template<class T>
void bar(T const& p1) {
    MyClass r;
    f(p1,r);   // C2893
}

int main() {
   map<int,int> m;
   bar(m);
}