C++ 에러 질문

#include <iostream>
#include <cstring>
#include <string>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

using namespace std;

template<class T>
void fun01( T* arr , int count);
template <> char* fun01<char**> (char** arr, int count);

int main(int argc, char** argv) {
	int arr[5] = {1,3,5,4,2};
	double arr01[5] = {0.1, 0.3, 0.5, 0.4, 0.2};
	fun01(arr,5);
	fun01(arr01,5);
	
	
	char * pstr[5] = 
	{
		"Seong-il Yoon",
		"Technical Communication Laboratory",
		"Technical Editor",
		"C++ Primer Plus Fourth Edition",
		"Correctness is another name of TCL"
	};
	
	cout<<fun01(pstr,strlen(pstr));
	
	return 0;
}



template<class T>
void fun01( T* arr, int count){
	T max = arr[0] ;
	for(int i=0; i<count; i++)
	{
		if(max>arr[i])
		{
		
		}else{
			max = arr[i];	
		}
	
	}
	cout<<max;
}

template <> char* fun01<char**>(char** arr, int count){
	char* max = arr[0];
	int maxIdx = 0;
	for(int i=0; i<count; i++){
		if(strlen(max)<strlen(arr[i])){
			max = arr[i];
			maxIdx = i;
		}else if(strlen(max)==strlen(arr[i])){
			max = arr[i];
		}
	}
	
	return max;
}


[Error] template-id 'fun01<char**>' for 'char* fun01(char**, int)' does not match any template declaration

이렇게 에러가 나는데 도대체 뭐가 잘못됬는지 1도 모르겠습니다.

파라미터 형이 char** 일떄 명시적 특수화로 만들어줬는데 왜 에러가 날까요

함수 템플릿은 특수화 하시면 안됩니다

참고하세요

참고로 C++17부터는 if constexpr 구문과 std::is_same을 이용해 타입 별로 다르게 실행되도록 할 수 있습니다.

1 Like

이야엄청자세하네잉

<char**> 을 뺴고 하니까 되네요 뭐지