オーバーロードされた乗算演算子を持つ配列を作成するためのテンプレートクラスをコーディングしようとしています。テンプレートクラスの実際の内部はうまく表示されますが、*演算子のオーバーロードに問題があります。私はもともと、通常のクラスで配列を掛けるためのオーバーロードされた演算子を持っていました。ここでは、その最初のオーバーロードされた演算子をテンプレートのベースとして使用しています。テンプレートクラス配列に乗算演算子をオーバーロードする
operator * (const Array<T>& a) const; //* operator
そして、私のメインのファイルでいただきました!これは、次のとおりです:いただきました私のヘッダファイル内
です
template <class T>
Array<T>::operator * (const Array<T>& a) const
{
if (num != a.num)
{
cout << "Error, arrays not equal!" << endl;
}
Array<int> tmp;
delete[] tmp.data;
tmp.data = new int[cap];
tmp.num = a.num;
tmp.cap = a.cap;
memcpy(tmp.data, a.data, sizeof(int)*num);
for(int i = 0 ; i < num ; i++)
{
tmp.data[i] = tmp.data[i] * a.data[i];
}
return tmp;
}
私は受け付けており、エラーが何かがTMPと間違っていることを私に語っています。 "エラー:関数の最後に" return tmp "を参照して、 'Array'を 'int'に変換することはできません。私は
Array <int> d = a * c;
は、配列dに関連するエラーメッセージがありますが、それらはまた、オーバーロード内のエラーに根ざしているように見えるメインで作成した2つのアレイ(AとC)を()乗算しようとしています
演算子関数。 tmpはどのように 'int'に変換されますか?
を、私はそれが実際にデフォルト化を行うコンパイラであると信じて、私は(C99は、あまりにもC++はwouldntの理由もしません)標準は、その行動を禁止していると思うが、許可されたとして、これを取るいけません – Creris