-1
함수 전문화 문제가 발생했습니다. 내가 is<char **>(tab, n)
으로 함수를 호출 할 때함수 특수화가 작동하지 않습니다.
template <class type>
void is(type tab, int n) {
string key;
int i, j;
for(i=1; i<n; i++){
key=tab[i];
j=i-1;
while(j>=0 && tab[j]>key){
tab[j+1]=tab[j];
j--;
}
tab[j+1]=key;
}
}
template <>
void is <char **> (char *tab[], int n){
char* key;
int i, j;
for(i=1; i<n; i++){
key=tab[i];
j=i-1;
while(j>=0 && strcmp(tab[j], key)>0){
tab[j+1]=tab[j];
j--;
}
tab[j+1]=key;
}
}
내가 정확 해요 경우, 프로그램은 전문성을 사용해야합니다. 그렇다고하더라도 나는 그것을 컴파일 할 수 없다. 내가받는 것은 sort.cpp:(.text+0x0): multiple definition of void is<char**>(char**, int)
입니다. 주어진 도움에 정말 감사 할 것입니다.
정의 또는 호출에'is'이 필요하지 않습니다. 단지'template <> void is (char * tab [], ...)'이 좋습니다. 그러나 코드는 문법적으로 잘 보입니다. 여러 개의 .cpp 파일에 사용되는 헤더에 코드를 정의하고 있습니까? –
Barry
또한 함수를 전혀 전문으로하지 않으므로 과부하 일뿐입니다. void is (char * tab [], int n) {..}'. 과부하가 더 간단합니다. – Barry
[전문화에는 문제가 없습니다.] (https://ideone.com/Vtw6im). –