函數改成物件封裝的陣列錯誤

2008-03-27 4:46 am
下面的程式碼 我改成物件的型態
卻出現陣列宣告錯誤的相關訊息
請熟悉C++的仁兄 幫我解答一下哪裡出錯了~
致贈廿點感謝
===========================
#include <iostream.h>
#include <iomanip.h>
class array{
int x[7][4]={{7,5,17,15},{9,4,35,33},{6,12,44,26},{5,2,7,14},{12,18,36,21},{3,25,32,32},{1,8,22,40}};
public:
array(){};
void get_array();
void sort();
void print();
};
int main ()
{
array N;
N.get_array();
N.sort();
N.print();
return 0;
}
void array::get_array()
{
for(int row=0;row<7;row++)
for(int col=0;col<4;col++)
{
cout<<setw(4)<<x[row][col];
cout<<endl;
}
cout<<endl;
}
void array::sort()
{
for(int row=0;row<7;row++)
for(int col=0;col<3;col++)
if(x[row][col]>x[row][col+1])
{
int t;
t=x[row][col];
x[row][col]=x[row][col+1];
x[row][col+1]=t;
}
for(int col=0;col<4;col++)
for(row=0;row<6;row++)
for(int i=row+1;i<7;i++)
if(x[row][col]>x[i][col])
{
int T;
T=x[row][col];
x[row][col]=x[i][col];
x[i][col]=T;
}
}
void array::print()
{
for(int row=0;row<7;row++)
for(int col=0;col<4;col++)
cout<<setw(4)<<x[row][col];
cout<<endl;
}
=======
錯誤訊息如下:
(5) : error C2059: syntax error : '{'
(5) : error C2334: unexpected token(s) preceding '{'; skipping apparent function body
(6) : error C2065: 'x' : undeclared identifier
(26) : error C2109: subscript requires array or pointer type

回答 (1)

2008-03-27 10:09 am
✔ 最佳答案
我不是 C++ 的高手。
就我所知,在宣告 class 時,是不可以給初值的!
所以,你的 x[][] = { {}, {} }; 不可行!

怎麼辦?
答案是:要寫在 constructor 裡。

可是,有 7 * 4 = 28 之多,
x[0][0] = 7, x[0][1] = 5, ...;
會寫死人耶!

我只想到一個作弊法:用 C 去初值化,用 C++ constructor copy 回去!
用個 全域
int X[7][4] = { { }, { }, ... }; // 你那段初值化程式
在 constructor 裡寫:
array( ) { memcpy(x[0], X[0], sizeof(X)); };

你的程式另有一些問題:
一、sort 裡某個 for (int row=...) // 紅字不見了!
二、你的 get_array 是 print!不名符實。
三、你 sort 的標準是什麼?它好像不 work!

哪不懂請再問。 ^_^


收錄日期: 2021-04-11 17:15:03
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20080326000015KK09697

檢視 Wayback Machine 備份