引用:
Originally posted by poenxu
您的意思是說我的elevator_status總共宣告了兩次,我想應該是這意思囉?
可是宣告class的時候,宣告elevator_status是因為在宣告屬性.而宣告類別屬性的時候是不能設定初值的...所以我才會在後面的constructor宣告初值.
那為什麼這樣會變成重複宣告了.是我的觀念出問題了嗎,可否請您替我說明一下呢?
因為課本沒有這類問題的說明了.
|
嗯•••錯誤訊息無關重複宣告。
只是猜想您想用宣告並設定初值的語法來做陣列值的設定,
才會提到宣告的語法•••
先說明 complier 給的訊息是什麼意思。
首先,您同意 elevator_status[5][8] 是一個 char 變數吧?而執行
代碼:
elevator_status[5][8] = 'x';
會將值 'x' 指定給它。同樣的,
代碼:
elevator_status[10][20] = ....; //其實,已經超出陣列的範圍了
也只是要將右邊運算的結果 (其型態應該要是或可以轉成 char),
指定給 elevator_status[10][20] 這個 char 變數而已,
而不是要設定整個 elevator_status 陣列的內容。
不過這也沒關係,如果語法沒錯的話,這樣可能還是可以執行,
只是可能程式會當掉,或產生無法預期的結果。
但現在是連編譯都無法通過,訊息是說語法有錯。
原因就是因為 "=" 的右手邊是
代碼:
{
"電梯目前在1f",//0 //預設有10種狀態
"電梯目前在2f",//1
"電梯開門中",//2
"電梯已經開啟",//3
"電梯關門中",//4
"電梯已經關閉",//5
"電梯往1f移動中",//6
"電梯往2f移動中",//7
"超過載重量",//8
"電梯待命中"//9 //電梯的所有預設狀態
}
根本沒辦法運算,而且最後也少了 ";"
至於您提到的宣告類別屬性不能設定初值的問題,
如果您這個陣列是所有 elevator_sample 物件共用的話,
那應該還是可以設定初值的,試著宣告成靜態成員。
不是很確定•••應該是類似下面這樣:
代碼:
static char elevator_status[10][20];
然後在類別外,另外加一行
代碼:
char elevator_sample::elevator_status[10][20] = {
"電梯目前在1f",//0 //預設有10種狀態
"電梯目前在2f",//1
"電梯開門中",//2
"電梯已經開啟",//3
"電梯關門中",//4
"電梯已經關閉",//5
"電梯往1f移動中",//6
"電梯往2f移動中",//7
"超過載重量",//8
"電梯待命中"//9 //電梯的所有預設狀態
}; // 不要忘了加分號•••