クラスA内の配列をクラスB内で書き換えをする方法 – プログラミング – Home

クラスA内の配列をクラスB内で書き換え...
 
通知
すべてクリア

クラスA内の配列をクラスB内で書き換えをする方法


lie
 lie
(@lie)
ゲスト
結合: 19年前
投稿: 5
Topic starter  

クラスA内の配列をfriendクラスB内で書き換えを行いたいのですが、どうもうまくいき
ません。

ソースは

class classA{
friend classB;
private:
int play[110][6];
public:
void set_data();
int read(int, int);
};

int stage::read(int x,int y){
return play[x][y];
}

class classB{
public:
void shoot(int, int, int);
};

void classB::shoot(int x,int y,int z){
stage::play[x][y]=z;
}

classA内のvoid set_dataで配列playの初期値を入力し、int readでmain文から配列play
の数値を呼び出しを行う。
classB内のvoid shootで配列の番号を指定し、zの値に書き直す。

という風にしたいのですが、「静的でないメンバへの参照が正しくありません」とエラ
ーが出てしまします。
shoot内のplayの指定方法が悪いのは分かるのですが、具体的にどういう風に直せばいい
のかわからないので、どなたかご教授お願いします。

環境:.NET2003 XP(SP2)


引用解決済
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

classB::shoot()内で classA のインスタンスにアクセスできない限り無理。
もしくは classA::play[][] をstaticにすべし。

# 教本を読みましょう。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

多分、stageというのがclassAなんだろうとして、
クラスって言うのは型枠にすぎないのでそれだけあっても
実体はないと言う事になります。
επιστημηさんが言われている「staticにすべし。」
にしてもstaticにする意味がきちんとわかっていないなら
安易にするべきではありません。
この辺はクラス設計に関わるのでちゃんとC++言語の文法と
オブジェクト指向の基本的な知識くらいは無いと理解できないと思います。

できれば、入門書で体系付けて勉強した方が良いです。
見切り発車で先に進んでしまうと後で苦労すると思います。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

あと、
今書かれている範囲では出てこないけど、classAのインスタンスって何処にあるの?
っていう話になるんですが、この質問に答えられますか?

この辺の概念的な部分がわかっていないとC++は理解しにくいと思いますよ。


返信引用
ぬ
 ぬ
(@ぬ)
ゲスト
結合: 18年前
投稿: 39
 

C++って言うか、Cの構造体も理解し辛いように思えますが。


返信引用
lie
 lie
(@lie)
ゲスト
結合: 19年前
投稿: 5
Topic starter  

>もしくは classA::play[][] をstaticにすべし。

staticにすると、今度は
「外部シンボル public: static int (* classA::play)[6] は未解決です。」
と出てきてしまいます。

>classB::shoot()内で classA のインスタンスにアクセスできない限り無理。

教本見て頑張ってみます。

>多分、stageというのがclassAなんだろうとして

すみません、名前を変えるのを忘れてました。
stage→classAです。

>staticにする意味がきちんとわかっていないなら

あまり理解してなく、静的にするという程度にしか分かっていません。

>classAのインスタンスって何処にあるの?

mainの中です。

クラスの仕組みを理解できてないのが原因のようなので、
教本を見つつ頑張ってみようと思います。
返答して下さって、ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました