2017-02-10 3 views
0
#include<cstdlib> 
#include<iostream> 
#include<math.h> 
#include<string> 
using namespace std; 

class getAverage{ 
public: 

template<class add> 
add computeAverage(add input[], int nosOfElem){ 

add sum = add();//calling default constructor to initialise it. 
for(int index=0;index<=nosOfElem;++index){ 
    sum += input[index]; 
} 

return double(sum)/nosOfElem; 
} 

template<class looptype> 
looptype* returnArray(int sizeOfArray){ 

     looptype* inputArray= (int*)malloc(sizeof(int)*sizeOfArray); 

    for(int index=0;index<=sizeOfArray;++index){ 
     inputArray[index]=index;//=rand() % sizeOfArray; 
     } 
return inputArray; 
} 
}; 

int main(){ 

int sizeOfArray=2; 
int inputArray; 
getAverage gA; 
int* x= gA.returnArray(sizeOfArray); 

for(int index=0;index<=2;++index){ 
cout<<x[index]; 
} 
cout<<endl; 
cout<<gA.computeAverage(x,sizeOfArray); 
free(x); 
return 0; 
} 

を導き出すことができませんでした(INT、長い文字列..etcを。)。私はそれをやろうとしましたが、 "looptype"は型の値を決して得られないことに気付きました。誰かがこれを行う方法を提案することはできますか?は、私は別のタイプの動的配列を作成することができ、それを通してテンプレート関数を作成するテンプレートパラメータ「looptype」

おかげ

+1

なぜ「自動」ではないのですか?また、C++コードで 'malloc'はここで何をしていますか? Cスタイルのポインタとサイズのペアを渡すのではなく、サイズを返すメソッドを持つコンテナ 'std :: vector'を絶対に使用しないで' new [] 'を使用してください。 – tadman

答えて

1
template<class looptype> 
looptype* returnArray(int sizeOfArray){ 

    looptype* inputArray= (int*)malloc(sizeof(int)*sizeOfArray); 
    for(int index=0;index<=sizeOfArray;++index){ 
     inputArray[index]=index;//=rand() % sizeOfArray; 
    } 
    return inputArray; 
} 

テンプレートパラメータは機能、テンプレート引数から推論することができます。関数テンプレートの唯一の引数はsizeOfArrayで、これはintです。コンパイラはtypename looptypeが何であるかをどのように知っていますか?推論することはできないので、明示的に指定する必要があります。

int* x= gA.returnArray<int>(sizeOfArray); 

いうより:

int* x= gA.returnArray(sizeOfArray); 

ところで、私はあなたのコード行によって販売されているとして、それが唯一のintことができる知っているときのテンプレートパラメータlooptypeを持つのポイントは何でしょう:

mallocの使用は怖いです。事実上同じパフォーマンスのために、単純なタスクを複雑にしています。 std::vector<int>または悪い場合はstd::unique_ptr<int[]>が好ましい。

関連する問題