가속화 된 C++을 통해 작업하고 있습니다. & Ex에 문제가 발생했습니다. 10.2 질문에는 이전 챕터의 중간 값 함수를 다시 작성해야하므로 벡터 나 내장 배열을 사용하여 중간 값을 호출 할 수 있습니다. 중간 값 함수는 모든 산술 형 컨테이너를 허용해야합니다.템플릿 오류 : 일치하는 함수 호출이 없습니다.
나는 아래 중간 세부에 두 통화를 할 수 없습니다 - 나는
No matching function for call to 'median'
내가 템플릿을 사용하는 경우 유형은 컴파일 타임에 알려진 것이 몇 가지 조사에서 수집 된 오류 메시지가 나타납니다. 이 문제가 근본적인 문제일까요? 어떻게 든 형식을 템플릿 인수로 전달할 수 있습니까?
여기에 지금까지 내 코드입니다 :#include <iostream>
#include <vector>
#include <stdexcept>
#include <algorithm>
#include <cstddef>
using namespace std;
template <class Iterator, class Type>
Type median(Iterator begin, Iterator end)
{
vector<Type> vec(begin,end);
typedef typename vector<Type>::size_type container_sz;
container_sz size = vec.size();
if (size == 0) {
throw domain_error("median of an empty vector");
}
sort(vec.begin(), vec.end());
container_sz mid = size/2;
return size % 2 == 0 ? (vec[mid] + vec[mid - 1])/2 : vec[mid];
}
int main()
{
vector<int> grades;
for (int i = 0; i != 10; ++i){
grades.push_back(i);
}
const int int_array[] = {2, 9, 4, 6, 15};
size_t array_size = sizeof(int_array)/sizeof(*int_array);
cout << median(int_array, int_array + array_size) << endl; //error here: Semantic Issue, No matching function for call to 'median'
cout << median(grades.begin(), grades.end()) << endl; //error here: Semantic Issue, No matching function for call to 'median' "
return 0;
}
반대 또한, 하나는 등급 = {0, 1, 2, 3, 4 , 5, 6, 7, 8, 9}'및'auto size = vec.size();'(즉, typedef를 제거하는 것). 원한다면'endl'을''\ n "'로 대체 할 수도 있습니다. –
median<int>(grades.begin(), grades.end())
를 호출해야합니다첫 번째 패스 독자에게는 컴파일 타임 오류의 원인이되는 줄 (* 양쪽 모두 *를 포함하여)과 주석 (예 : // <== 여기 오류)을 표시하십시오. 즉,'Type' 템플릿 매개 변수는 작성중인 호출에서 추론 할 수 없으며 궁극적으로 핵심 문제입니다. 나는 표준 라이브러리가 제공하는 템플릿 ['iterator_traits'] (http://en.cppreference.com/w/cpp/iterator/iterator_traits)이 당신의 문제에 대한 깨끗한 해결책이라고 생각한다. – WhozCraig
전체 오류 메시지를 포함하십시오. 일반적으로 함수 호출에서 어떤 유형이 추론되는지 알려주고 실제 예상되는 유형과 비교할 수 있습니다. –