全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1202
推到 Plurk!
推到 Facebook!

請問如何在私有類別宣告陣列資料成員

尚未結案
fireworm
一般會員


發表:11
回覆:24
積分:7
註冊:2004-12-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-04 14:38:22 IP:220.131.xxx.xxx 未訂閱
請問在私有類別裡可以宣告陣列資料成員嗎? 如果可以請問要如何宣告?謝謝..
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-05 20:43:46 IP:221.169.xxx.xxx 未訂閱
可以呀,就跟一般陣列宣告是一樣的,像是 int a[255]; 之類的 你有遇到什麼問題嗎?
fireworm
一般會員


發表:11
回覆:24
積分:7
註冊:2004-12-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-07 09:35:01 IP:218.171.xxx.xxx 未訂閱
因為自己在除錯時,錯誤是發生在私有類別的資料成員。我是這樣設的例如:char picture[2]={1,2};或int money[2]={25000,25000};總共有20處這類的同樣錯誤,理由是error C2334: unexpected token(s) preceding '{'; skipping apparent function bodyerror C2059: syntax error : '{'。我寫了多行的程式碼,檔案是用1個.h檔兩個.cpp檔構成,如果要把程式碼貼上來可能會佔很大的篇幅,所以只好針對問題所在發問,謝謝你幫我解答...^^
hornacek
一般會員


發表:29
回覆:76
積分:21
註冊:2004-02-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-07 13:21:48 IP:220.135.xxx.xxx 未訂閱
引言: 因為自己在除錯時,錯誤是發生在私有類別的資料成員。我是這樣設的例如:char picture[2]={1,2};或int money[2]={25000,25000};總共有20處這類的同樣錯誤,理由是error C2334: unexpected token(s) preceding '{'; skipping apparent function bodyerror C2059: syntax error : '{'。我寫了多行的程式碼,檔案是用1個.h檔兩個.cpp檔構成,如果要把程式碼貼上來可能會佔很大的篇幅,所以只好針對問題所在發問,謝謝你幫我解答...^^
類別的資料成員應該是不能在宣告之初設初始值, 一般都是將初始值的給值放在建構式(constructor)中...
fireworm
一般會員


發表:11
回覆:24
積分:7
註冊:2004-12-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-07 22:13:21 IP:218.171.xxx.xxx 未訂閱
謝謝你們給我的解答。我已經把這項錯誤修改完成了。可是又遇到另一個問題,我compile沒有錯誤,但執行時會有以下的情形發生,以下是執行的部份結果: 請輸玩家 1 的姓名:123 請輸玩家 2 的姓名:46 請輸入要比賽幾回合:5    &&&&&&&目前第 1 回 (繞地圖第 -858993460 圈)&&&&&&&&&&& 現在輪到 123 請擲骰子?(1.是、3.放棄不玩、5.賣財產、7.查詢財產、其他為停留): 關於紅色部分-858993460,我不曉得為什麼無法顯示圈數,而產生亂數,這亂數感覺常看過,有誰知道這亂數的意思嗎?是否可以由此得知我該往哪方面做修改,因為compile沒錯我也不知道如何改起了。
ldd
一般會員


發表:12
回覆:62
積分:19
註冊:2004-07-06

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-08 00:24:06 IP:61.59.xxx.xxx 未訂閱
把所計數的變數做一下初使設定看看.........也許有幫助.:)
fireworm
一般會員


發表:11
回覆:24
積分:7
註冊:2004-12-04

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-08 10:33:12 IP:218.171.xxx.xxx 未訂閱
以下是關於回圈的部份程式碼: 在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<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^歡迎進入大富翁世界^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"<>name[i];
        }
}
以下是主要遊戲程式的函數部分定義:
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<r[i]<<" 圈)&&&&&&&&&&&"<0)
                        {
                                if (smash[i]==2)
                                cout<<"\n此人已經破產"<
程式碼很多所以不可能把完整程式碼po上來,可是我又想不到有比較好的表達方式,根據提供我參考答案的朋友們,以上是我改出來的結果,我把初始化都放在建構式play裡頭,包括計算圈數的r[i],也有在建構式裡初始化,我有問過朋友他們說這種compile沒錯的邏輯錯誤很難找到錯誤。以上希望能得到大家的建議,謝謝 發表人 - fireworm 於 2004/12/08 10:39:38
slender
一般會員


發表:0
回覆:1
積分:0
註冊:2003-03-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-12-09 09:40:43 IP:210.68.xxx.xxx 未訂閱
你在 private 宣告int r[2]; 又在 play::play() 中, 宣告了另一個新的 int r[2]={1,1}; 並初始化.. 但是你在 private 內的 r[], 根本就沒有初始化 ...卻又要將它印出來.. 所以可能 compiler 根本就沒有給他初值.. 應該是這原因...
hornacek
一般會員


發表:29
回覆:76
積分:21
註冊:2004-02-02

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-12-09 09:52:45 IP:210.243.xxx.xxx 未訂閱
引言: 你在 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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-12-09 19:59:01 IP:220.131.xxx.xxx 未訂閱
以下是在建構式根據兩位朋友提供的意見,更改過的部份程式碼
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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-12-09 22:49:38 IP:221.169.xxx.xxx 未訂閱
初始化不能這樣做 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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-12-10 14:39:39 IP:220.131.xxx.xxx 未訂閱
謝謝大家的指教,我已經更正好程式了,沒有你們的指教可能到現在程式還不能完成,謝謝^^,讓我更正很多觀念...
系統時間:2024-11-23 20:55:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!