合計 昨日 今日

きょーちゃん
 
記事: 11
登録日時: 2010年10月13日(水) 00:40
日記: 日記を見る (17)
日記
- 3月 2011
ボランティア (0)
   2011年3月26日(土) 00:06
物理とか詳しい方何か思いつきませんか? (7)
   2011年3月19日(土) 18:49
仕事のこと。 (7)
   2011年3月02日(水) 00:34

+ 2月 2011
+ 11月 2010
+ 10月 2010
カテゴリー
カテゴリに指定された日記はありません

やっぱり立ちはだかるクラスの壁

パーマリンクby きょーちゃん on 2011年2月14日(月) 22:02

こんばんは。

今日はマップにキャラを重ねてみました。

画像

コードはゲームプログラミングの館のサンプルをそのまんまくっつけました。
画像だけ差し替えて。

で、メインがごちゃごちゃするのは嫌なので分割しようとすると、静的メンバがどうのこうのとエラーだらけです。
ヘッダファイルで構造体を定義するとクラス扱いになるのか???
よくわからんけど、知らない間にクラスを作っている・・・のか・・・・・・・?
あぁもう何が問題なのかも分からん~お手上げ!

やっぱクラス勉強しないと駄目だぁ・・・
いや、駄目ってことないけど、やっぱ使えるようになりたいな><

コメント数: 11 閲覧数: 28329
コメント

Re: やっぱり立ちはだかるクラスの壁

パーマリンクby MoNoQLoREATOR on 2011年2月14日(月) 22:28

静的メンバだからといってクラス扱いになっているというわけではないのでは?

とりあえず分割時のルールとか確認してみて、一週間くらい粘ってみては?
自分の力だけで解決した問題は一生忘れませんから。

ちなみに私は最初の頃3ヶ月粘って解決しましたw
さすがに感動で涙が出ました^^;


あ、ちなみに
class
をつけなくても、構造体の中に関数を書くとそれはクラスとみなされますよ。
アバター
MoNoQLoREATOR
 
記事: 284
登録日時: 2011年2月11日(金) 22:30
お住まい: 名古屋
日記: 日記を見る (182)

Re: やっぱり立ちはだかるクラスの壁

パーマリンクby Dixq (管理人) on 2011年2月14日(月) 23:23

新しい事を学ぶのって難しいですよね~(´▽`;)
特にプログラムの考え方って普段の生活に無い考え方が多いし。

ところでC++の前にCってもう学ばれました?
Cを学んでからC++を勉強しないとなかなか理解が追い付かない事も多いかと思います。。。
C++って演算子のオーバーロードで、普通ありえない代入も出来たりすることが多いので、
基礎を理解せずに使ってしまうと思わぬ間違いをしてしまうことも。
例えばstring型では許されているようなことは大抵Cではできなかったり。

char *str;
str = "aaa";
str[0] = 'b';

これを実行するとどうなるか・・。
boostなんか使うとCの原型とどめていないような使い方が出来るのでわけがわからなくなるかもしれません・・。

基礎を学ぶってダルくて気が進まないですが、基礎から着実にやることって案外近道だったりします。
本であれば柴田さんの本がお勧めです。
http://www.amazon.co.jp/%E6%96%B0%E7%89 ... 4797327928

ググっても勉強できますけどね。
http://www.google.co.jp/search?hl=ja&so ... 0&aql=&oq=

まぁわからないことがあれば質問すればみんな教えてくれますよ!ファイトです^^
最後に編集したユーザー Dixq (管理人) [ 2011年2月14日(月) 23:24 ], 累計 1 回
アバター
Dixq (管理人)
管理人
 
記事: 1596
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (581)

Re: やっぱり立ちはだかるクラスの壁

パーマリンクby SAI on 2011年2月15日(火) 00:00

ファイル分割は悩みに悩みましたね~w
あれが今思えばコンパイルエラーの最後の壁だった気がします。
泣きそうになったので放っておいたら後々やらざるをえない状況になって泣きました。
Alea jacta est !
アバター
SAI
 
記事: 115
登録日時: 2010年10月24日(日) 12:26
お住まい: はひほーひ
日記: 日記を見る (247)

Re: やっぱり立ちはだかるクラスの壁

パーマリンクby ISLe on 2011年2月15日(火) 00:34

Dixq (管理人) さんが書きました:char *str;
str = "aaa";
str[0] = 'b';

これを実行するとどうなるか・・。

Windowsだと期待どおりに動いてしまいませんか?
Linuxあたりだと即落ちますけど。

(追記)
わたしはC言語を始めて間もなく外部変数(関数やクラスの定義より外で宣言する変数)は必ずstaticを付けるべしと強制的に慣れさせられたので、ファイル分割にはほとんど抵抗ありませんでした。
extern指定子は本の中でしか見たことがないと言って良いくらい使ったことがありません。
最後に編集したユーザー ISLe [ 2011年2月15日(火) 00:43 ], 累計 1 回
ISLe
 
記事: 2603
登録日時: 2010年10月16日(土) 22:47
日記: 日記を見る (19)

Re: やっぱり立ちはだかるクラスの壁

パーマリンクby きょーちゃん on 2011年2月15日(火) 01:13

>MoNoQLoREATOR さん

実は静的メンバが何なのかもよく分かってないんですよね^^;
ググったらクラスについて解説してあるページが出てくるから勝手にクラスの何かだと思ってたり・・・
今まで見よう見まねでテキトーに分割してたツケがまわってきてる気がします・・・
構造体の中に関数は書いてないです・・・う~ん・・・???

>Dixqさん
「Cの絵本」って本は読みました。
勉強らしい勉強といったらそれぐらいかも^^;あとはとりあえずやってみて、行き詰ったらググるの繰り返しです・・・
もっといろんな本読んでちゃんと勉強したほうが良さそうですね・・・
柴田さんの本なんか良さそうだから買ってみようかな・・・ありがとうございます^^

char *str;
str = "aaa";
str[0] = 'b';

これ・・・実行できません><
やり方が間違ってるのかな・・・ちなみにVC++2010使ってます・・・

>SAIさん
最後の壁ですか~いきなり手を出してはいけなかったのかも・・・
でもコード長いと自分でも訳わからないから分割はしたいし・・・
泣きたいです;;

>ISLeさん
externばっか使ってます^^;
人のコード見てstaticだらけでなんじゃこりゃって思ってました。
明日からstatic使ってみます。
最後に編集したユーザー きょーちゃん [ 2011年2月15日(火) 01:16 ], 累計 1 回
きょーちゃん
 
記事: 11
登録日時: 2010年10月13日(水) 00:40
日記: 日記を見る (17)

Re: やっぱり立ちはだかるクラスの壁

パーマリンクby Dixq (管理人) on 2011年2月15日(火) 08:17

> ISLeさん

へろりさん曰く環境依存のようですが、
ほとんどの処理系では定数領域に確保されるので、書き換えができないと思います。
具体的にどの処理系ができてどの処理系ができないかは調べていませんが。

> きょーちゃんさん

書き換え可能な領域とそうでない領域があるんですよ。

・・あぁもう会社行かないといけない時間だからあまり詳しく書けない^^;
後、externよりstatic使って隠蔽した方がいいって話は確か質問掲示板で回答した通りだと思うので、よければ参考にどうぞ。
ただ、最初からあまり隠蔽だの効率だのは意識しなくても良いと思いますので、
とにかく沢山コードを書くことが良いと思いますよ。
良くないコードを書かないと何が良いコードなのかもわからないと思いますしね。
アバター
Dixq (管理人)
管理人
 
記事: 1596
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (581)

Re: やっぱり立ちはだかるクラスの壁

パーマリンクby softya(ソフト屋) on 2011年2月15日(火) 17:20

私も本は買ったほうが良いと思うのですが、サイトを紹介します。

「ロベールのC++教室」 ← ここを改定した「ロベールのC++入門講座」もお勧めです。
http://www7b.biglobe.ne.jp/~robe/cpphtml/index.html
「C++入門」
http://wisdom.sakura.ne.jp/programming/cpp/index.html
「C++入門」
http://www5c.biglobe.ne.jp/~ecb/cpp/cpp00.html
「C++入門」
http://www.asahi-net.or.jp/~yf8k-kbys/newcpp0.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
アバター
softya(ソフト屋)
副管理人
 
記事: 11677
登録日時: 2010年10月16日(土) 23:56
お住まい: 東海地方
日記: 日記を見る (242)

Re: やっぱり立ちはだかるクラスの壁

パーマリンクby ISLe on 2011年2月15日(火) 17:48

Dixq (管理人) さんが書きました:ほとんどの処理系では定数領域に確保されるので、書き換えができないと思います。
具体的にどの処理系ができてどの処理系ができないかは調べていませんが。

MS-DOS以前からのお行儀の良くないプログラムを動かすための互換性だと思いますがWindowsでは書き換えができます。
組込み系を除けばWindowsしかないと思うんですけど書き換えできないのが常識と言っていいのやら。

(追記)
個人的には自由にやって後から矯正するよりも、最低限のルールを守って作って、力が付いて後から理由を理解するほうが効率が良い気がします。
例えばゲームのメインループはひとつにして、DXライブラリならループの最後に一つだけあるScreenFlipで画面を更新するように、というような。
ウチではこんなふうに
コード[C++]: 全て選択
1
2
3
4
5
while (ProcessMessage() != 0 && ClearDrawScreen() != 0) {
    Update();
    Render();
    ScreenFlip();
}

Update関数にゲーム処理を書いて、Render関数に描画処理をまとめるルールにしてます。

(さらに追記)
わたしがC言語始めたときに言われたのは「外部変数にstatic付けろ」だけで、「あとは壊して覚えろ」でした。
当時はバッファオーバーフローとかすると簡単にOSレベルで暴走してハードディスクのデータが吹っ飛びましたから。
最後に編集したユーザー ISLe [ 2011年2月15日(火) 18:18 ], 累計 2 回
ISLe
 
記事: 2603
登録日時: 2010年10月16日(土) 22:47
日記: 日記を見る (19)

Re: やっぱり立ちはだかるクラスの壁

パーマリンクby MoNoQLoREATOR on 2011年2月15日(火) 22:06

ちなみに・・・数日前、友人にファイル分割時のテクニック(?)を教えてもらいました。非常に便利なのでつかってみては?

ヘッダファイル
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
#ifdef GLOBAL_INSTANCE
#define GLOBAL
#else
#define GLOBAL extern
#endif
 
 
GLOBAL 変数の型 変数名;//値を代入してもOK


WinMainがあるファイル
コード[C++]: 全て選択
1
2
3
4
5
6
7
#define GLOBAL_INSTANCE//何よりもまず先に書くこと
 
//変数宣言は書かないこと
 
int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC){
    return(0);
}


これなら、いちいちグローバル変数をコピーしてexternを書き加える必要がありません。
アバター
MoNoQLoREATOR
 
記事: 284
登録日時: 2011年2月11日(金) 22:30
お住まい: 名古屋
日記: 日記を見る (182)

Re: やっぱり立ちはだかるクラスの壁

パーマリンクby ISLe on 2011年2月15日(火) 23:30

MoNoQLoREATOR さんが書きました:ちなみに・・・数日前、友人にファイル分割時のテクニック(?)を教えてもらいました。非常に便利なのでつかってみては?

これはまさにこのサイト『C言語何でも質問サイト』のプログラミングの館で紹介されているやり方ですね。
初期値があるとリンクで二重定義エラーになりますよ。
ISLe
 
記事: 2603
登録日時: 2010年10月16日(土) 22:47
日記: 日記を見る (19)

Re: やっぱり立ちはだかるクラスの壁

パーマリンクby きょーちゃん on 2011年2月16日(水) 01:18

>Dixqさん
externとstaticで掲示板調べたらいろいろ出てきました。
本の解説よりも実践的ですごく参考になります^^
自分は知識から入るのとても苦手なので、もう書いて書いて書きまくりたいと思います!

>softyaさん
分かりやすいサイトをたくさんありがとうございます!
特にロベールさんのところはとても自分好みでした^^
本が届くまではここで頑張ってみようと思います。

>ISLeさん
やはりまずは実践あるのみ!ですよね。
とにかく書きまくってみます。あ、基本には忠実に^^;
ただ暴走はちょっと怖いです(汗)

>MoNoQLoREATORさん
ありがとうございます。
ちょっとまだ理解できなくて自分のコードにどう使えばいいかわからないです・・・
文法の勉強しっかりしてから挑戦してみます!
きょーちゃん
 
記事: 11
登録日時: 2010年10月13日(水) 00:40
日記: 日記を見る (17)

オンラインデータ

登録ユーザー: なし