2017-05-15 7 views
0

テンプレートを使い始めましたが、問題があります。 char *型に関数sumを使用したいので、コンパイルに失敗します。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

私は関数sum(a、b)をテンプレートと型 'char *'の特殊関数を使って実装する必要があります。 –

答えて

3

スタート - あなたは、このような関数を書く2つの文字列を追加したい場合は、retun a

を(前年比戻り値の型を参照)ことができますか?パラメータは文字列であり、数値ではありません。おそらく2つの文字列を連結する必要がありますか?あなたはそれが付加価値を考える場合

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テンプレート関数を特化することができます。これを達成する何かを書きます。私。

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 

この例は非常に原油とないもちろん、あなたがやりたいと思いますものです

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

だから今、あなたはこれを行うことができます重要なコード。私はこれが単なる演習であると仮定しています。この方法では、特定の価値を追加することはできません。もちろん、これはすでに標準ライブラリでさまざまな方法で達成されています。

1

この問題は、コードテンプレート、問題に関連しません:

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

ので(* Aのタイプ)はchar(char *ではない)、(* a + * b)の型はint(算術演算では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; 
} 
関連する問題