[問題] 二維陣列和重載[]

看板C_and_CPP (C/C++)作者 (前面右轉)時間13年前 (2013/04/02 00:57), 編輯推噓0(0012)
留言12則, 2人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 問題(Question): 現在我有一個matrix的class 裡面有個template<class T> T **mat 然後目前重載[]算半成功吧= = matrix<int> A; cout << A; 這樣可以正確的output出結果 A[i][j] = rand()%5; 這樣他說我lvalue有錯QQ 餵入的資料(Input): 亂數(通常是int) 預期的正確結果(Expected Output): 就可以寫入正確的數字 錯誤結果(Wrong Output): error: lvalue required as left operand of assignment 程式碼(Code):(請善用置底文網頁, 記得排版) template<class T> class matrix { public: T **mat; class temp { public: int *array; temp(T* array):array(array){} T operator[](int index){return array[index];} }; temp operator[](int index) { return temp(mat[index]); } friend ostream &operator<<(ostream &out,matrix<T> &mm) { for(int i = 0;i < mm.len;i++) { for(int j = 0;j < mm.len;j++) out << mm[i][j] << " "; out << endl; } return out; } }; int main() { matrix<int> A(9); // 9x9矩陣 值預設都0 cout << A; // 這邊輸出看起來是對的! for(int i = 0;i < 9;i++) for(int j = 0;j < 9;j++) A[i][j] = rand()%5; //error cout << A; return 0; } 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.123.33

04/02 01:11, , 1F
T operator[](int index){return array[index];}
04/02 01:11, 1F

04/02 01:11, , 2F
T&
04/02 01:11, 2F

04/02 01:11, , 3F
index 是 size_t 不是 int
04/02 01:11, 3F

04/02 01:15, , 4F
!! 我加了&之後對了 可是改成size_t就不會過O_O
04/02 01:15, 4F

04/02 01:16, , 5F
想請問一下為什麼要用size_t呢? index不是都是int嗎?
04/02 01:16, 5F

04/02 01:19, , 6F
那問一下 A[ -1 ][ 0 ] 合理嗎? 至少用 unsigned 吧
04/02 01:19, 6F

04/02 01:23, , 7F
所以迴圈用 int 去跑也是很奇怪的
04/02 01:23, 7F

04/02 01:28, , 8F
參數用 int 接那麼 caller 傳 -1 給你不能算他的錯,
04/02 01:28, 8F

04/02 01:29, , 9F
而且你可能還要加個 precondition 在 doc 裡才能真正
04/02 01:29, 9F

04/02 01:29, , 10F
說明這個 operator 的用途, 那還不如改用 unsigned 來
04/02 01:29, 10F

04/02 01:30, , 11F
接, caller 傳錯東西是他要負責不是你, 因為型態就說
04/02 01:30, 11F

04/02 01:30, , 12F
明清楚預期的引數值域
04/02 01:30, 12F
文章代碼(AID): #1HMRnrR1 (C_and_CPP)
文章代碼(AID): #1HMRnrR1 (C_and_CPP)