2017-05-15 4 views
0

템플릿을 사용하기 시작했는데 문제가 있습니다. char * 유형에 함수 합계를 사용하려고하는데 컴파일이 실패합니다.C++ 특수 함수 템플릿

오류 내가 가지고 :

cannot initialize return object of type 'char*' with an rvalue of type 'int' 

코드 :

#include <iostream> 

using namespace std; 

template<class T> 
T sum(const T a, const T b){ 
    return (a+b); 
} 

char* sum(char* a, char* b){ 
    return (*a + *b); 
} 
+2

달성하고자하는'sum (char * a, char * b)는 무엇입니까? 이것이 템플릿 문제라고 생각하지 않습니다. a와 b가 가리키는 주소에 문자 값을 추가하고 그 결과를 숫자가 아닌 문자에 대한 포인터로 해석하려고하는 것처럼 보입니다. –

+0

나는 'char *'타입을위한 템플릿과 특수 함수를 사용하여 함수 합 (a, b)를 구현해야한다. –

답변

3

시작 - 당신은 다음과 같은 기능을 쓰기 두 개의 문자열을 추가 할 경우에 당신은 retun a

을 (전년 동기 대비 반환 형식 참조) 할 수 있습니까? 매개 변수는 문자열이 아니기 때문에 숫자가 아닙니다 아마 두 문자열을 연결해야합니까? 당신이 가치를 추가 생각하는 경우

char* sum(char* a, char* b){ 
    char* sum = new char[ strlen(a) + strlen(b) + 1 ]; 
    memcpy(sum, a, strlen(a)); 
    memcpy(sum + strlen(a), b, strlen(b)); 
    sum[strlen(a) + strlen(b)] = '\0'; 
    return sum; 
} 

지금 당신이, 당신이 그것을에 원하는 것을 할 수 있도록하기 위해 sum 템플릿 기능을 전문으로 할 수

이 달성 무언가를 작성합니다. 나는.

template<> 
char* sum<char*>(char* a, char* b){ 
... 

그래서 지금 당신은이 작업을 수행 할 수 있습니다

int c = sum(5, 7); 
cout << c << endl; 

char face[5] = {'F', 'a', 'c', 'e', '\0'}; 
char book[5] = {'b', 'o', 'o', 'k', '\0'}; 
char* raw = sum(face, book); 
cout << raw << endl; 
delete [] raw; // Remember you need to delete the heap that sum() grabbed. 

출력 :

12 
Facebook 

이 예제는 물론, 매우 조잡하고 뭔가 당신은에서 할 싶어하지 중요한 코드. 저는 이것이 이런 식으로 전문화하는 것이 어떤 특별한 가치도 추가하지 않고 단지 표준 라이브러리에서 다른 방식으로 이미 달성 된 것처럼 단지 운동 일 뿐이라고 추측합니다.

1

이 문제는 코드 템플릿, 문제와 관련되지 않습니다

char* sum(char* a, char* b) { 
    return (*a + *b); 
} 

때문에 (*는 유형)는 char (char *가 아님)이고, (* a + * b) 유형은 int (자동 산술로 캐스팅됩니다)이고 int는 유형 인 "char *" 반환 값. 합계를 가정

1

숯불 * 데이터 유형에 대한 연결이 다음 코드는 아래와 같이해야 의미

+ 연산자의 char * 과부하되지 않으며, 당신은 옵션이있는 경우 다음 문자열이 아닌 문자의 사용되어야한다으로
char* sum(char* a, char* b){ 
    char *ret = a; 
    strcat(ret,b); 
    return ret; 
} 

*

2

return *a+*b을 입력 할 수 없습니다. return *a도 아닙니다. sum(char* a, char* b)이해야 할 무엇을 의미하는지 물어

char* sum(char* a, char* b){ 
    char * ret = (char *) malloc(1 + strlen(a)+ strlen(b)); 
    strcpy(ret, a); 
    strcat(ret, b); 
    return ret; 
}