2014-09-10 3 views
0

IntelliSense의 문제 일 수는 있지만 필자는 실제로 사실인지 아닌지를 읽었습니다. 코드를 컴파일 할 때 오류 (제목)가 나타나고이를 수정하는 방법을 모릅니다. 내 책 (Stephen Prata의 "Sams C++ Primer Plus")은 내 문제에 답하지 않습니다. 나는 꽤 비슷한 프로그램을 썼고 문제는 나타나지 않았다.기능 템플릿의 인스턴스가 지정된 유형과 일치하지 않습니다.

아마도 형식 지정자에 문제가 있습니까? 템플릿의 것과 같습니까? 내 언어에 정말 죄송합니다 ...

#include <iostream> 

template <typename T> 
T maxn(T tab[], int size); 

template <> float maxn<float>(float, int); // Problem appears here... 

int main() 
{ 
    std::cin.get(); 
    return 0; 
} 

template <typename T> 
T maxn(T tab[], int size) 
{ 
    T max = tab[0]; 
    for (int i = 1; i < size; i++) 
    { 
     if (tab[i] > max) max = tab[i]; 
    } 
} 

나는 고맙게 생각합니다. 감사!

+0

적어도 오류가 발생하면 게시하십시오. 당신은 또한 일한 다른 프로그램의 부분을 게시 할 수 있습니까? – Gutblender

답변

1

전문화의 첫 번째 인수가 잘못되었습니다. float을 주겠지 만 템플릿에 따라 수레 배열이어야합니다.

template <> float maxn<float>(float[], int); 
//        ^
// You need to indicate that the first parameter is an array. 

전문화 본문을 선언하지 않으므로 사용하려고하면 링크가 실패합니다. (다른 컴파일 장치에서 구현을 제공하지 않는 한)

+0

아 ... 전문 분야는 템플릿과 동일한 매개 변수 집합을 가져야합니다. 고맙습니다! (전문화 된 본문이 없습니다. 오류가 발생했을 때 글쓰기를 중단했기 때문입니다.) – Seu

+0

@Seu 예, 그렇지 않으면 템플릿을 전문으로하지 않습니다. 과부하를 제공하고 있습니다. 괜찮습니다. , 그것은 템플릿 전문화가되지 않을 것입니다. ('float maxn (float, int);'는 유효합니다.) – cdhowie

관련 문제