請問如何在私有類別宣告陣列資料成員 |
尚未結案
|
fireworm
一般會員 發表:11 回覆:24 積分:7 註冊:2004-12-04 發送簡訊給我 |
|
justdo
高階會員 發表:2 回覆:359 積分:222 註冊:2004-08-17 發送簡訊給我 |
|
fireworm
一般會員 發表:11 回覆:24 積分:7 註冊:2004-12-04 發送簡訊給我 |
因為自己在除錯時,錯誤是發生在私有類別的資料成員。我是這樣設的例如:char picture[2]={1,2};或int money[2]={25000,25000};總共有20處這類的同樣錯誤,理由是error C2334: unexpected token(s) preceding '{'; skipping apparent function body或error C2059: syntax error : '{'。我寫了多行的程式碼,檔案是用1個.h檔兩個.cpp檔構成,如果要把程式碼貼上來可能會佔很大的篇幅,所以只好針對問題所在發問,謝謝你幫我解答...^^
|
hornacek
一般會員 發表:29 回覆:76 積分:21 註冊:2004-02-02 發送簡訊給我 |
引言: 因為自己在除錯時,錯誤是發生在私有類別的資料成員。我是這樣設的例如:char picture[2]={1,2};或int money[2]={25000,25000};總共有20處這類的同樣錯誤,理由是error C2334: unexpected token(s) preceding '{'; skipping apparent function body或error C2059: syntax error : '{'。我寫了多行的程式碼,檔案是用1個.h檔兩個.cpp檔構成,如果要把程式碼貼上來可能會佔很大的篇幅,所以只好針對問題所在發問,謝謝你幫我解答...^^類別的資料成員應該是不能在宣告之初設初始值, 一般都是將初始值的給值放在建構式(constructor)中... |
fireworm
一般會員 發表:11 回覆:24 積分:7 註冊:2004-12-04 發送簡訊給我 |
謝謝你們給我的解答。我已經把這項錯誤修改完成了。可是又遇到另一個問題,我compile沒有錯誤,但執行時會有以下的情形發生,以下是執行的部份結果:
請輸玩家 1 的姓名:123
請輸玩家 2 的姓名:46
請輸入要比賽幾回合:5 &&&&&&&目前第 1 回 (繞地圖第 -858993460 圈)&&&&&&&&&&& 現在輪到 123 請擲骰子?(1.是、3.放棄不玩、5.賣財產、7.查詢財產、其他為停留):
關於紅色部分-858993460,我不曉得為什麼無法顯示圈數,而產生亂數,這亂數感覺常看過,有誰知道這亂數的意思嗎?是否可以由此得知我該往哪方面做修改,因為compile沒錯我也不知道如何改起了。
|
ldd
一般會員 發表:12 回覆:62 積分:19 註冊:2004-07-06 發送簡訊給我 |
|
fireworm
一般會員 發表:11 回覆:24 積分:7 註冊:2004-12-04 發送簡訊給我 |
以下是關於回圈的部份程式碼:
在private我這樣宣告int r[2];int fail[2];int money[2];char picture[2];char name[2][5];.......
在pulic我這樣宣告 int n; int round;play();void player();//輸入玩家姓名 void startgame();//主程式.......
以下是部分建構式的程式碼
play::play() { int chance_m[8]={0,5000,1000,3000,-6000,-1500,-2000,500}; //計算圈數 int r[2]={1,1}; //玩家的錢 int money[2]={25000,25000}; char picture[2]={1,2}; }以下是輸入玩家姓名函數定義: void play::player() { int p=1; cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^歡迎進入大富翁世界^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"<以下是主要遊戲程式的函數部分定義: void play::startgame() { int destiny1; //機會亂數 int chance1; //命運亂數 int game=0; //判斷剩下幾個人 for (int i=0 ; i<=1 ; i ) { for (int g=0 ; g<=1 ; g ) { if (smash[g]==0) game =1; } if(game==1 || giveup==1) { round=n 1; i=5; } else { cout<程式碼很多所以不可能把完整程式碼po上來,可是我又想不到有比較好的表達方式,根據提供我參考答案的朋友們,以上是我改出來的結果,我把初始化都放在建構式play裡頭,包括計算圈數的r[i],也有在建構式裡初始化,我有問過朋友他們說這種compile沒錯的邏輯錯誤很難找到錯誤。以上希望能得到大家的建議,謝謝 發表人 - fireworm 於 2004/12/08 10:39:38 |
slender
一般會員 發表:0 回覆:1 積分:0 註冊:2003-03-02 發送簡訊給我 |
|
hornacek
一般會員 發表:29 回覆:76 積分:21 註冊:2004-02-02 發送簡訊給我 |
引言: 你在 private 宣告int r[2]; 又在 play::play() 中, 宣告了另一個新的 int r[2]={1,1}; 並初始化.. 但是你在 private 內的 r[], 根本就沒有初始化 ...卻又要將它印出來.. 所以可能 compiler 根本就沒有給他初值.. 應該是這原因...我也覺得是這樣,你在建構式中又宣告一個跟成員變數一樣名稱的變數, 它會在建構式結束後消失,而成員變數還是一樣沒有初始到... play::play() { ... r[2]={1,1}; // 這樣就可以了 ... } |
fireworm
一般會員 發表:11 回覆:24 積分:7 註冊:2004-12-04 發送簡訊給我 |
以下是在建構式根據兩位朋友提供的意見,更改過的部份程式碼
play::play() { chance[8][40]={"通緝,吃免錢飯","加盟萊爾富獲利","好人好事代表獲頒獎金","中樂透", "飆車遇警察攬檢","機車排氣未檢驗罰款","深夜外出被搶損失","銀行存款利息"}; chance_m[8]={0,5000,1000,3000,-6000,-1500,-2000,500}; r[2]={1,1}; money[2]={25000,25000}; picture[2]={1,2}; }我在建構式去掉int,char之類的型態,卻出現play.cpp(11) : error C2059: syntax error : '{' , play.cpp(11) : error C2143: syntax error : missing ';'before '{' , play.cpp(12) : error C2143: syntax error :missing ';'before '}'之類的27個同樣錯誤,是否代表程式還有其他錯誤的地方需要更正,麻煩再給予指教,謝謝... 發表人 - fireworm 於 2004/12/09 20:05:18 發表人 - fireworm 於 2004/12/09 20:07:24 |
justdo
高階會員 發表:2 回覆:359 積分:222 註冊:2004-08-17 發送簡訊給我 |
初始化不能這樣做
r[2]={1,1};
這樣是指定某樣東西放到r陣列的第3個元素 有幾個方法初始化這些成員:
1.假若這些成員內容沒有需要去變動的話
你可以這樣做
.h檔 class test { public: static int r[2]; ... }; .cpp檔 int test::r[2]={1,2};宣告成static會使得所有test類別產生的物件共用一份r陣列,在應用上會有所限制,但是能用快速的方法初始化。 2.假如這些內容是會變動的話 .h檔 class test { public: int r[2]; test(); }; .cpp檔 test::test() { r[0]=1; r[1]=2; }這裡就一個一個指定陣列的值... |
fireworm
一般會員 發表:11 回覆:24 積分:7 註冊:2004-12-04 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |