我想編寫一個模板類,使數組具有重載乘法運算符。模板類的實際內部看起來很好,但是我對*運算符的重載有問題。我原來有一個重載操作符用於在常規類中乘數組,在這裏我使用第一個重載操作符作爲模板的基礎。重載模板類數組中的乘法運算符
這是什麼在我的頭文件:
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的錯誤。它聲明「錯誤:無法在函數結尾處將'Array'轉換爲'int'返回」參考「return tmp」。
我想乘兩個陣列(a和c)在主()創建
Array <int> d = a * c;
有與陣列d錯誤消息,但這些也似乎植根於錯誤重載內部操作員功能。 tmp如何變成'int'?
我認爲它實際上是做瀆職的編譯器,我認爲標準禁止這種行爲(C99確實太少,沒有理由C++難道不),但不以此爲理所當然 – Creris