ページ 11

とても初歩的なことなのですが・・・

Posted: 2012年8月29日(水) 00:25
by aix
5、宣言の仕方を工夫しようのところで、最後に書いてある「後は「main.cpp」「graph.cpp」「load.cpp」にある変数の定義部と、extern宣言を全て消してください。」とはどこをけせばいいのですか・・・そもそも定義部って?って感じです・・・定義してる場所ってことはわかりますけどコード上でどこを指すのか細かいことがわかりません・・・教えてください。

Re: とても初歩的なことなのですが・・・

Posted: 2012年8月29日(水) 01:05
by jay
え~と、龍神録の館の事ですよね?
そう言うところはちゃんと書いておいて下さいね~

さて、本題ですが
変数の定義部が何かといいますと「変数を定義している所が定義部」です
分かりませんか? つまり特にココ! って決められている訳ではないのです

もう少し具体的にお話しますと
第4章ではimg_chという配列をmain.cppで
int img_ch[2][12];
と"定義"していますよね?

もし宣言が何なのか、さえ理解できていないのならC言語の入門書等でお勉強してください
そのレベルだったら龍神録の館の仕様を理解するのは厳しいです

お話を戻しますが
img_chはmain.cppで宣言されているので、それを使えるのは当然main.cppの中でだけです
でも画像を描画するためにはgraph.cppでも使えないと困りますよね?
そこでgraph.cppでは
extern int img_ch[2][12];
と、「他のファイルにあるimg_ch[2][12]という配列を使います」と"宣言"している訳です

でもこのやり方だと敵の構造体とか弾とか背景とか、制御するのが色々出て来た時に大変だから一箇所にスッキリ纏めましょう
というのが第5章ですね

そう言う訳で「main.cpp」「graph.cpp」「load.cpp」にある変数を"定義"している所と"宣言"している所を消せばOKです

Re: とても初歩的なことなのですが・・・

Posted: 2012年8月29日(水) 07:07
by beatle
jayさんの書き込みの補足ですが、宣言と定義は次の使い分けがあります。
宣言:メモリ領域は確保されない。extern宣言は、どこか他の場所にその変数がある、と知らせる。
定義:メモリ領域が確保される。変数定義は、変数の実体がその場所に生成される。

Re: とても初歩的なことなのですが・・・

Posted: 2012年8月29日(水) 16:47
by ISLe
変数の宣言と定義は排他的ではなく、宣言のうち、領域の確保をともなうものを定義と呼びます。

変数に限らず宣言は識別子を使えるようにするために行うものです。
変数の定義は必ず宣言を含みます。

変数宣言:変数名を使えるようにすること
変数定義:変数宣言のうち、実体の確保をともなうもの
です。

Re: とても初歩的なことなのですが・・・

Posted: 2012年8月29日(水) 19:53
by Dixq (管理人)
Aというファイルで定義した変数をBというファイルでそのまま使うことはできません。

※定義というのは
int a;
みたいな感じですね。変数を定義している部分です。

Bというファイルで使うには、Bというファイルで
extern int a;
のようにextern宣言しなければなりません。

つまりAというファイルでは
int a;
Bというファイルでは
extern int a;
とすることで、両方のファイルで変数が使えるようになるわけです。
館では、同じGV.hをincludeするだけで、これが自動的に行われるような仕組みを紹介しています。
(この使い方が良いか悪いかは置いておくとして・・・)