![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 疑難雜症區
(https://www.pcdvd.com.tw/forumdisplay.php?f=34)
- - 可以請問一下這程式的問題在哪嗎?
(https://www.pcdvd.com.tw/showthread.php?t=341504)
|
|---|
可以請問一下這程式的問題在哪嗎?
是我的問題太過愚蠢嗎?
下面是我自己寫的一個類別,主要是在宣告一個電梯. 但是經過編譯以後,在宣告"電梯狀態"字串陣列的地方,卻出現了錯誤... 我問過老師,但是他給我的回覆還是太深澳了一一" 也上過網路討論區去求教.But都沒有人願意幫我><" 這三個錯誤已經想4天有了...但就是突破不了...各位板友幫幫忙吧ㄒ^ㄒ ====================================== --------------------Configuration: MyElavator - Win32 Debug-------------------- Compiling... MyElavator.cpp E:\課本作業\MyElavator.cpp(14) : error C2059: syntax error : '{' E:\課本作業\MyElavator.cpp(14) : error C2143: syntax error : missing ';' before '{' E:\課本作業\MyElavator.cpp(25) : error C2143: syntax error : missing ';' before '}' ====================================== class elevator_sample //建立類別:電梯 { private: int elevator_floor; //定義屬性:電梯樓層 int status_number; //電梯狀態編號 char elevator_status[10][20];//定義屬性:電梯狀態字串陣列 public: //建立者:建立電梯屬性的原始內容 elevator_sample() { elevator_floor=1; //電梯所在樓層,一開始設定在1f status_number=9; //電梯狀態預設為:電梯待命中 elevator_status[10][20]= { "電梯目前在1f",//0 //預設有10種狀態 "電梯目前在2f",//1 "電梯開門中",//2 "電梯已經開啟",//3 "電梯關門中",//4 "電梯已經關閉",//5 "電梯往1f移動中",//6 "電梯往2f移動中",//7 "超過載重量",//8 "電梯待命中"//9 //電梯的所有預設狀態 } } void show_elevator_floor() //定義function:顯示電梯所在樓層 { cout<<"電梯目前在"<<elevator_floor<<"樓"<<endl; } void show_elevator_status() //定義function:顯示電梯目前狀態 { cout<<"電梯目前狀態是" <<elevator_status[status_number]<<endl; } }; ================================================= |
最簡單也最直覺的辦法:一一地初始化你的陣列的每個元素:
代碼:
#include "iostream.h"
class elevator_sample //建立類別:電梯
{
private:
int elevator_floor; //定義屬性:電梯樓層
int status_number; //電梯狀態編號
char* pElevator_status[10];//定義屬性:電梯狀態字串陣列
public: //建立者:建立電梯屬性的原始內容
elevator_sample() {
elevator_floor=1; //電梯所在樓層,一開始設定在1f
status_number=9; //電梯狀態預設為:電梯待命中
pElevator_status[0] = "電梯目前在1f";
pElevator_status[1] = "電梯開門中";
pElevator_status[2] = "電梯已經開啟";
pElevator_status[3] = "電梯關門中";
pElevator_status[4] = "電梯已經關閉";
pElevator_status[5] = "電梯往1f移動中";
pElevator_status[6] = "電梯往2f移動中";
pElevator_status[7] = "超過載重量";
pElevator_status[8] = "電梯待命中";
}
void show_elevator_floor() {//定義function:顯示電梯所在樓層
cout<<"電梯目前在"<<elevator_floor<<"樓"<<endl;
}
void show_elevator_status() {//定義function:顯示電梯目前狀態
cout<<"電梯目前狀態是"<<pElevator_status[status_number]<<endl;
}
};
void main() {
elevator_sample elevator;
}
或許有更快地初始化一個物件的陣列屬性的方式,但是一時找不到,就先擋著用吧! |
回覆: 可以請問一下這程式的問題在哪嗎?
引用:
E:\課本作業\MyElavator.cpp(14) : error C2059: syntax error : '{' E:\課本作業\MyElavator.cpp(14) : error C2143: syntax error : missing ';' before '{' E:\課本作業\MyElavator.cpp(25) : error C2143: syntax error : missing ';' before '}' 少分號? |
回覆: 可以請問一下這程式的問題在哪嗎?
引用:
這一段程式碼有點問題,如果 "=" 意思是宣告 (declaration),並想在宣告的時候同時設定值的話,elevator_status 前面要加 char。 (但前面已經宣告過了,所以會等於重複宣告。) 以語法看來: 在這裡 "=" 的語意應該是指定算符 (assignament), "=" 的左手項 elevator_status[10][20] 指的是一個 char。 照之前的宣告,elevator_status是一個有 200 個 char 的二維陣列, elevator_status[10][20] 是第... 嗯... 第 221 個? 至於 "=" 的右邊的意思,它的意思.... 我想想,那根本不該出現在指定算符的右邊。 |
回覆: 回覆: 可以請問一下這程式的問題在哪嗎?
這一段程式碼有點問題,如果 "=" 意思是宣告 (declaration),並想在宣告的時候同時設定值的話,elevator_status 前面要加 char。
(但前面已經宣告過了,所以會等於重複宣告。) 以語法看來: 在這裡 "=" 的語意應該是指定算符 (assignament), "=" 的左手項 elevator_status[10][20] 指的是一個 char。 照之前的宣告,elevator_status是一個有 200 個 char 的二維陣列, elevator_status[10][20] 是第... 嗯... 第 221 個? 至於 "=" 的右邊的意思,它的意思.... 我想想,那根本不該出現在指定算符的右邊。 ===================================================== 您的意思是說我的elevator_status總共宣告了兩次,我想應該是這意思囉? 可是宣告class的時候,宣告elevator_status是因為在宣告屬性.而宣告類別屬性的時候是不能設定初值的...所以我才會在後面的constructor宣告初值. 那為什麼這樣會變成重複宣告了.是我的觀念出問題了嗎,可否請您替我說明一下呢? 因為課本沒有這類問題的說明了. |
#include "iostream.h"
class elevator_sample //建立類別:電梯 { private: int elevator_floor; //定義屬性:電梯樓層 int status_number; //電梯狀態編號 char* pElevator_status[10];//定義屬性:電梯狀態字串陣列 public: //建立者:建立電梯屬性的原始內容 elevator_sample() { elevator_floor=1; //電梯所在樓層,一開始設定在1f status_number=9; //電梯狀態預設為:電梯待命中 pElevator_status[0] = "電梯目前在1f"; pElevator_status[1] = "電梯開門中"; pElevator_status[2] = "電梯已經開啟"; pElevator_status[3] = "電梯關門中"; pElevator_status[4] = "電梯已經關閉"; pElevator_status[5] = "電梯往1f移動中"; pElevator_status[6] = "電梯往2f移動中"; pElevator_status[7] = "超過載重量"; pElevator_status[8] = "電梯待命中"; } ===================================================== 很謝謝你替我想出了代替方法,可以再向您請教一些問題嗎? 您所用的char* pElevator_status[10] 它是同時宣告一個[10]的字串陣列和一個char型態指標嗎? 因為我在課本的指標章節和陣列章節裡面都沒看到這樣的宣告方法. 可否請您敘述一下他的用法呢? 另外,我該怎麼編輯我的文章,才可以像您一樣. 讓程式的縮排呈現出來呢? |
char* pElevator_status[10]
1.char* 是 C 風格的字串,所以這表示我宣告了一個"內容為字元指標,長度為10"的陣列。 2.使用 [ CODE ]...[ /CODE ] (注意:[]間的空格要去掉!!)把你的程式碼包起來,可以讓程式碼以原本的方式呈現!但是因為 PCDVD 的"代碼功能"預設是黑色,所以再用[ COLOR=silver ]...[ /COLOR ] 把 [ CODE ]...[ /CODE ] 包起來,看起來像這樣: [ COLOR=silver ] [ CODE ] void main() { ... } [ /CODE ] [ /COLOR ] 這樣瞭了嗎? :) |
回覆: 回覆: 回覆: 可以請問一下這程式的問題在哪嗎?
引用:
嗯•••錯誤訊息無關重複宣告。 只是猜想您想用宣告並設定初值的語法來做陣列值的設定, 才會提到宣告的語法••• 先說明 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 //電梯的所有預設狀態
}; // 不要忘了加分號•••
|
回覆: 回覆: 回覆: 回覆: 可以請問一下這程式的問題在哪嗎?
恕刪...
哈哈~ 我知道我哪邊出錯了 ======================= 她的宣告字串陣列教學是 char message[4][80]= { "xxxxx", "ooooo", "oxooxoo", "xoxxo" } ======================= 她的習題程式是 char message[4][80]= { {"oooo"}, {"xxxxx"}, {"oxoxoxo"}, {"oxoxoxox"} }; ======================= 她的範例教學跟程式示範有出入,結果我也看漏掉. 所以一直被誤認為我在宣告字元陣列XD.... 忙到早上4點,終於在鳥叫聲中.發現問題所在了....ㄒ^ㄒ |
回覆: 回覆: 回覆: 回覆: 回覆: 可以請問一下這程式的問題在哪嗎?
這篇可能長了一點一一a....
以下是我的程式碼↓ 代碼:
#include<iostream.h>
class elevator_class //類別:電梯
{
int elevator_floor; //電梯樓層
char elevator_status[11][30];//宣告電梯狀態陣列
public:
elevator_class()//建構
{
int elevator_floor=1;//set elevator at 1f
char elevator_status[11][30]=
{
{"電梯目前在1f"}, //0
{"電梯目前在2f"}, //1
{"電梯目前在3f"}, //2
{"電梯往1f移動中"}, //3
{"電梯往2f移動中"}, //4
{"電梯往3f移動中"}, //5
{"電梯開門中"},//6
{"電梯已經開啟"}, //7
{"電梯關門中"},//8
{"電梯已經關閉"}, //9
{"電梯待命中"}//10
};
}//建構結束
void set_elevator_floor()
{
cout<<"請輸入電梯所在樓層(1~3) :";
cin>>elevator_floor;
}
};
class button_class
{
char button_list[7][20];//
char button_action[7][20];
public:
button_class()//建構
{
char button_list[7][20]=
{
{"1F"}, //0
{"2F"}, //1
{"3F"}, //2
{"開門"}, //3
{"關門"}, //4
{"往上"}, //5
{"往下"} //6
};
char button_action[7][20]=
{
{"按下1F按鈕"}, //0
{"按下2F按鈕"}, //1
{"按下3F按鈕"}, //2
{"按下開門按鈕"}, //3
{"按下關門按鈕"}, //4
{"按下往上按鈕"}, //5
{"按下往下按鈕"} //6
};
}//建構結束
};
class user_class
{
int user_floor;
int user_inout;
public:
user_class()
{
int user_floor=1;//預設使用者在1樓
int user_inout=1;//0是在電梯裡面,1是在電梯外面
}
void set_user_floor()
{
cout<<"請輸入使用者所在樓層(1~3) :";
cin>>user_floor;
}
};
void main()
{
elevator_class elevator; //宣告物件:電梯
button_class button; //宣告物件:按鈕
user_class user; //宣告物件:使用者
elevator.set_elevator_floor();//設定電梯所在樓層
user.set_user_floor(); //設定使用者所在樓層
}
===================================================== 我現在在思考另一個問題... 我計畫中的做法是: 我只要輸入電梯,使用者各在哪一樓層. 程式就會自己執行電梯移動到幾樓,電梯開門,電梯關門等等的動作. 所以我得讓電腦判斷: 如果"user_floor(使用者所在樓層)"比"elevator_floor(電梯所在樓層)""高" 它會cout電梯往上移動,電梯開門/關門等等的字串. 反之亦然... 但是user_floor與elevator_floor是分別屬於兩個物件的private. 導致我沒辦法讓她們在main裡面作比較大小耶... 1.不希望把她們設定成public.因為這樣違反information hiding原則... 也不確定設定成public以後,main是否就可以比較了. 2.不能設定成friend或者divice. 2-1.設定成friend int user_floor,friend int elevator_floor的話, user_floor或者elevator_floor就不是那兩者class的private了. 2-2.設定成divice user物件跟elevator物件沒辦法繼承彼此耶... ===================================================== 我的解決辦法是將private的elevator_floor與user_floor的值. 設定給main的兩個int變數.待兩者int變數做完比較以後.再告訴程式該cout哪些字串. 但是這樣似乎是繞了一大圈且吃力不討好. 還是說我這樣的做法在information hiding的原則下,是對的呢? 因為老師說過,當我們要求高度information hiding的時候. 程式執行手續會相對複雜化. 想請問兩位板友的看法^_^" |
| 所有的時間均為GMT +8。 現在的時間是06:01 PM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2026。