나는 몇 시간 동안 내 머리를 아프게하고 있지만이 코드를 실행하려고 할 때 왜 오류가 발생하는지 이해할 수 없다. 내가 관리 시간은 표현 범위를 좁힐 수 있습니다 후 :하나의 템플릿 함수에 두 개의 다른 비교기를 전달할 수없는 이유는 무엇입니까?
문제가 발생pastryPrice()
- 당신이 볼 수 있듯이을, 내가
struct dialingAreaComp{
inline bool operator()(const Deliver *d1, const Deliver *d2)const {
return d1->getDialingArea() < d2->getDialingArea();
}
};
struct pastryPrice {
inline bool operator()(const Pastry *p1, const Pastry *p2)const {
return p1->getPrice() < p2->getPrice();
}
};
template<class T>
void sortCollection(T& collection)
{
if (typeid (collection) == typeid(vector <Deliver*>))
{
sort(collection.begin(), collection.end(), dialingAreaComp());
printCollection(collection);
}
else if (typeid (collection) == typeid(vector <Pastry*>))
{
sort(collection.begin(), collection.end(), pastryPrice());
printCollection(collection);
}
else { cout << "WRONG!"; }
}
분류의 하나 개의 템플릿 기능에 대한 다수의 비교기를 구축하기 위해 노력하고있어 내가 다섯 가지 오류를 받고 있어요
, 모두 같은 :
심각도 코드 설명 프로젝트 파일 라인 억제 상태 오류 C2664 '부울 베이커리 :: pastryPrice :: 연산자 (const pastry *, const pastry *) const ':'전달 * '에서'const Pastry * '로 인수 1을 변환 할 수 없음 bakery c : \ program files (x86) \ microsoft visual studio 14.0 \ vc \ include \ xutility 809
그리고 하나 더 :
심각도 코드 설명 프로젝트 파일 라인 억제 상태 오류 C2056 불법 식 베이커리 C : \ 프로그램 파일 (86) \ 마이크로 소프트 비주얼 스튜디오 14.0 \ VC의 \ 포함 \ xutility (809)
내가 위에서 쓴 표현을 벗을 때, 코드가 일뿐입니다. - 두 개의 다른 비교기를 하나의 템플릿 함수에 전달할 수없는 이유는 무엇입니까?
지금 :
C2264 한 함수를 호환 형의 파라미터를 전달해야 할 때 발생하는 컴파일러 에러이다.
하지만 배달 기능이 작동하고 배달 비교 기능을 사용하면 패스트리가 컴파일되므로 ... 호환되지 않는 유형은 무엇입니까?
템플릿이 컴파일 타임에 평가되는 반면,'if' 문은 런타임에 평가되기 때문입니다. 그래서 항상 함수 호출 중 하나가 일치하지 않습니다. –