C++わくわくゲームプログラミングのページ81

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
前著C言語~はやり遂げました

C++わくわくゲームプログラミングのページ81

#1

投稿記事 by 前著C言語~はやり遂げました » 14年前

C++わくわくゲームプログラミング3章でカーナビをつくる部分なんですが
81ページのオーバーロードの説明で書かれているプログラムがうまくメイクできません

コード:

#include<iostream>
#include<math.h>
using namespace std;

class CarNavi{
   int points_x[50]; //地点のX座標(最大50地点)
   int points_y[50]; //地点のY座標(最大50地点)
   int pt_num;       //登録した地点の数
   float jisoku;
public:
   CarNavi() {
      pt_num = 0;
   }
   CarNavi(float j){ //時速を引数に取るコンストラクタ
      jisoku = j;
      pt_num = 0;
   } 
   int add(int, int); //追加関数のプロトタイプ宣言
   void listup();     //地点の一覧表示関数のプロトタイプ宣言
   float getkyori();  //距離を返す関数の宣言
   float getjikan();  //経過時間を返す関数の宣言
   void getjikan(float j){  //時速を引数に取るgetjikan関数
      jisoku = j;
      return(getjikan());
   }
   void setjisoku(float j){  //時速を設定する関数
      jisoku = j;
   }
};

//地点の一覧表示関数
void CarNavi::listup(){
   for(int i=0; i<pt_num; i=i+1){
      cout << "地点" << i << "=";
      cout << points_x[i] << ":" <<points_y[i] << endl;
   }
}

//追加関数の定義
int CarNavi::add(int x, int y){
   if(pt_num>=50) return(-1); //pt_numが50以上なら追加しない
   points_x[pt_num] = x;
   points_y[pt_num] = y;
   pt_num = pt_num + 1;       //pt_numを1増やす
   return(pt_num);
}

//距離を返す関数の定義
float CarNavi::getkyori(){
   float kyori=0;
   for(int i=0; i<pt_num-1; i=i+1){
      int dx = points_x[i+1]-points_x[i];
      int dy = points_y[i+1]-points_y[i];
      kyori = kyori + sqrt(dx*dx + dy*dy);
   }
   return kyori;
}
//経過時間を返す関数の宣言
float CarNavi::getjikan(){
   float kyori = getkyori();
   return(kyori/jisoku);
}

int main(){
   CarNavi cn(15);      //CarNavi型変数cnを宣言、引数付きコンストラクタを使用
   cn.add(1,1);         //add関数を呼び出して地点(1,1)を追加
   cn.add(5,3);
   cn.add(8,4);
   cn.listup();         //listup関数の呼び出し
// cn.setjisoku(15);    
   cout << cn.getkyori() << "km" << endl;
   cout << cn.getjikan() << "時間" << endl;
   cout << cn.getjikan(10) << "時間" << endl;
                                           //引数付きgetjikanの呼び出し
}

前著C言語~はやり遂げました

Re: C++わくわくゲームプログラミングのページ81

#2

投稿記事 by 前著C言語~はやり遂げました » 14年前

すみません、これがエラーメッセージ文です

エラー E2467 C:\MyC\3syou\string_class.cpp 24: 'CarNavi::getjikan(float)' は値を返せない(関数 CarNavi::getjikan(float) )
エラー E2094 C:\MyC\3syou\string_class.cpp 73: << 演算子が使われたがクラス ostream では void 型のための定義が存在しない(関数 main() )

BCC Developerを使っています

アバター
bitter_fox
記事: 607
登録日時: 15年前
住所: 大阪府

Re: C++わくわくゲームプログラミングのページ81

#3

投稿記事 by bitter_fox » 14年前

前著C言語~はやり遂げました さんが書きました:C++わくわくゲームプログラミング3章でカーナビをつくる部分なんですが
81ページのオーバーロードの説明で書かれているプログラムがうまくメイクできません

コード:

   void getjikan(float j){  //時速を引数に取るgetjikan関数
      jisoku = j;
      return(getjikan());
   }
値を返さない関数として宣言しているのに引数なしのgetjikan関数の戻り値(float型)を返しています。
ですのでこの関数もfloat型の値を返す関数として宣言してください。

あと、コードを乗せる際はcodeタグで囲ってください。(詳しくはフォーラムルールをお読みください。)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: C++わくわくゲームプログラミングのページ81

#4

投稿記事 by softya(ソフト屋) » 14年前

codeタグを追加しました。
「前著C言語~はやり遂げました」との事ですが、C言語のレベルの文法を理解出来ていないならやり遂げたことにはならないと思いますよ。

ここのコンテンツの
「新・C言語 ~ゲームプログラミングの館~ [DXライブラリ]」
http://dixq.net/g/
内容は理解出来て、同じことを説明とDXライブラリのリファレンスだけを見て書けますか?[訂正]

[追加]
結構気持ち悪いオーバーロードしてるんですが、これは元の本からですか?

コード:

   void getjikan(float j){  //時速を引数に取るgetjikan関数
      jisoku = j;
      return(getjikan());
   }

float CarNavi::getjikan(){
   float kyori = getkyori();
   return(kyori/jisoku);
}
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

前著C言語~はやり遂げました

Re: C++わくわくゲームプログラミングのページ81

#5

投稿記事 by 前著C言語~はやり遂げました » 14年前

前著もなんとか書き通せたというだけで大まかでアバウトにしかわかっておらず
正直あまり理解できたとはいえないです、すみませんorz
後ここにくるのも2度目なのでコードの参照をわかっていなかったという意味でも謝ります、すみません
色々と訂正を試してはいるもののまだうまくいっていません

コード:


class CarNavi{
   int points_x[50]; //地点のX座標(最大50地点)
   int points_y[50]; //地点のY座標(最大50地点)
   int pt_num;       //登録した地点の数
   float jisoku;
   float getjikan;

このようにしてみたり

コード:


public:
   CarNavi() {
      pt_num = 0;
   }
   CarNavi(float j){ //時速を引数に取るコンストラクタ
      jisoku = j;
      pt_num = 0;
   } 
   int add(int, int); //追加関数のプロトタイプ宣言
   void listup();     //地点の一覧表示関数のプロトタイプ宣言
   float getkyori();  //距離を返す関数の宣言
   float getjikan();  //経過時間を返す関数の宣言
   float getjikan(float j);
   void getjikan(float j){  //時速を引数に取るgetjikan関数
      jisoku = j;
      return(getjikan());
   }
   void setjisoku(float j){  //時速を設定する関数
      jisoku = j;
   }
};

このようにしてみたりしてみましたがうまくいかず・・・すみません

前著C言語~はやり遂げました

Re: C++わくわくゲームプログラミングのページ81

#6

投稿記事 by 前著C言語~はやり遂げました » 14年前

>>softya(ソフト屋)

はい、直前までのコード入力は問題なかったので(誤記などを除く)本の記述通りです

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: C++わくわくゲームプログラミングのページ81

#7

投稿記事 by ISLe » 14年前

前著C言語~はやり遂げました さんが書きました:エラー E2467 C:\MyC\3syou\string_class.cpp 24: 'CarNavi::getjikan(float)' は値を返せない(関数 CarNavi::getjikan(float) )
このメッセージで指摘されている関数のコードが書かれているのはどこからどこまでか分かりますか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: C++わくわくゲームプログラミングのページ81

#8

投稿記事 by softya(ソフト屋) » 14年前

bitter_foxさんの書かれたことを理解されてますが?
void getjikan(float j)
と宣言しておいて戻り値を返すことは出来ません。それがエラーの原因です。
これはC言語の文法レベルの問題ですので、C++のオーバーロード以前の問題です。

>はい、直前までのコード入力は問題なかったので(誤記などを除く)本の記述通りです

私的には結構サンプルとしてあんまりな書き方だと思ってしまいました。うーん。
とりあえず、この件は置いておきます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

前著C言語~はやり遂げました

Re: C++わくわくゲームプログラミングのページ81

#9

投稿記事 by 前著C言語~はやり遂げました » 14年前

問題となっている部分は24行目で5行目から29行目の中で訂正しなくてはならないという事だと考えています
class CarNavi
public:
等まだ知ってすぐの状態なのでほぼ理解していないといえるでしょう

前著C言語~はやり遂げました

Re: C++わくわくゲームプログラミングのページ81

#10

投稿記事 by 前著C言語~はやり遂げました » 14年前

>>softya(ソフト屋)さんへ

void型ということで何とかうまくいくことができました、ありがとうございます
値を入れることができない型では確かにfloatは無理ですね;

>>bitter_foxさんへ

全体の流れというものが理解できていないせいでどこが悪いのかわかっていませんでした、すみません
てっきりgetjikan関数というものが複数いるからオーバーロードになったものと考えていました

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: C++わくわくゲームプログラミングのページ81

#11

投稿記事 by softya(ソフト屋) » 14年前

そういえば、名前を個性的な名前で統一してくださいね。「前著C言語~はやり遂げました」はその場限り過ぎますので。
あと、C++をいち早く覚えたいのか、C言語からで良いのでしっかりやりたいのか、とりあえず早くゲームプログラミングしたいのか考えられた方が良いと思います。
なにもかも中途半端になる恐れがあります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: C++わくわくゲームプログラミングのページ81

#12

投稿記事 by ISLe » 14年前

前著C言語~はやり遂げました さんが書きました:問題となっている部分は24行目で5行目から29行目の中で訂正しなくてはならないという事だと考えています
24行目を含む関数は、質問に書かれたコードで22~25行目ですね。
C言語で関数というものを覚えませんでしたか?
前著C言語~はやり遂げました さんが書きました:class CarNavi
public:
等まだ知ってすぐの状態なのでほぼ理解していないといえるでしょう
関係ないですね。
C言語で関数を覚えていたら同じパターンに見えないことはないと思いますが。

前著C言語~はやり遂げました

Re: C++わくわくゲームプログラミングのページ81

#13

投稿記事 by 前著C言語~はやり遂げました » 14年前

皆さん色々とすみません、たすかりました<(_ _)>

それとどのように訂正したかを載せることにします

コード:


class CarNavi{
   int points_x[50]; //地点のX座標(最大50地点)
   int points_y[50]; //地点のY座標(最大50地点)
   int pt_num;       //登録した地点の数
   float jisoku;
public:
   CarNavi() {
      pt_num = 0;
   }
   CarNavi(float j){ //時速を引数に取るコンストラクタ
      jisoku = j;
      pt_num = 0;
   } 
   int add(int, int); //追加関数のプロトタイプ宣言
   void listup();     //地点の一覧表示関数のプロトタイプ宣言
   float getkyori();  //距離を返す関数の宣言
   float getjikan();  //経過時間を返す関数の宣言
   float getjikan(float j){  //時速を引数に取るgetjikan関数
      jisoku = j;
      return(getjikan());
   }
   void setjisoku(float j){  //時速を設定する関数
      jisoku = j;
   }
};


前著C言語~はやり遂げました

Re: C++わくわくゲームプログラミングのページ81

#14

投稿記事 by 前著C言語~はやり遂げました » 14年前

>>softya(ソフト屋)さんへ
理由としては全て当てはまります
ISLeさんが指摘なさったことは正にその通りでして
C言語は曖昧に覚えている部分が多くあるので早くその部分を固めたいと考えてCの絵本等で復習をできればとしているところです
C++に関してもあまり深く考えると全然進まないというのが自分でして(3Dモデリングソフトやフォトショ、Sai等でそんな感じでした)
とりあえずやってみて後から咀嚼していく方向でやっています
この本の別系列のDirectXの本も最後まで通してやりましたがこちらも大まかな部分しか理解していません
でも多分その方法で進めないとC言語の本の序中盤で止まったまま沢山本を買った状態だったと思うので
やり方の良い悪いはあまり良くないでしょうが仕方ないと思っている部分もあります

名前のほうも次回からちゃんとつけるようにします
今回の質問内では直しても混乱しそうな気がしますので直さないでおきます

前著C言語~はやり遂げました

Re: C++わくわくゲームプログラミングのページ81

#15

投稿記事 by 前著C言語~はやり遂げました » 14年前

今本を見返してみたら単なる入力ミスでしたorz
何度も見返したのに何で気付かなかったんだろう・・・すみません
>>softya(ソフト屋)さんへ
ということで本の記述どおりというのはすみません、誤りでしたorz
色々と申し訳ないです;;

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: C++わくわくゲームプログラミングのページ81

#16

投稿記事 by softya(ソフト屋) » 14年前

人により向いた方法が有るのは確かなので本人が無謀承知でやっているのであれば構いませんが、「Cの絵本」と言わず、もう少しちゃんとした本は買ってくださいね。
あと自分で作らないと身につきませんので、これ以上のゲーム作成の入門書ばかり追っていてもこの先のレベルに行けないと思うのですが、この本が終わったらどうされるおつもりですか?
前著C言語~はやり遂げました さんが書きました:>>softya(ソフト屋)さんへ
ということで本の記述どおりというのはすみません、誤りでしたorz
色々と申し訳ないです;;
まぁ、間違いを直した前提でメンバ関数の設計が私に取って気持ち悪いんですけどね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

前著C言語~はやり遂げました

Re: C++わくわくゲームプログラミングのページ81

#17

投稿記事 by 前著C言語~はやり遂げました » 14年前

>>softya(ソフト屋)さんへ

この本と前著のC言語の本のわからない部分を見返すことと、
他の本だとコードの書き方も少し変わっていると思いますので
二冊以上を見比べて、どういう特性でどう動いているのか
どうしないと動かないのか、どうしたら止まってしまうのかを把握していこうと思っています

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: C++わくわくゲームプログラミングのページ81

#18

投稿記事 by softya(ソフト屋) » 14年前

前著C言語~はやり遂げました さんが書きました:二冊以上を見比べて、どういう特性でどう動いているのか
どうしないと動かないのか、どうしたら止まってしまうのかを把握していこうと思っています
とりあえず立ち止まって足場固めはされるわけですね。
サンプルに機能を追加・変更したり、ゲームルールを変えてみるかはされないのでしょうか?そのほうが私は面白いと思うのですが。
例えば3Dモデリングソフトやフォトショプでもサンプルに変更を加えたりしませんでしたか?そんな感覚でいじってみてはどうでしょう?
その時に分からないことが出れば、C/C++の入門書などを調べれば良いでしょうし、ここで質問しても良いでしょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

前著C言語~はやり遂げました

Re: C++わくわくゲームプログラミングのページ81

#19

投稿記事 by 前著C言語~はやり遂げました » 14年前

softya(ソフト屋) さんが書きました: とりあえず立ち止まって足場固めはされるわけですね。
サンプルに機能を追加・変更したり、ゲームルールを変えてみるかはされないのでしょうか?そのほうが私は面白いと思うのですが。
例えば3Dモデリングソフトやフォトショプでもサンプルに変更を加えたりしませんでしたか?そんな感覚でいじってみてはどうでしょう?
その時に分からないことが出れば、C/C++の入門書などを調べれば良いでしょうし、ここで質問しても良いでしょう。
DirectXの本の方で自分が用意したXファイルを入れ替えたりまではしてみましたがルールの変更等は未だ行っていないです
これは知識の基礎がそろったら是非ともやってみたい!
クォータニオンやモデルのアニメーション等も全然勉強していないのでその穴も埋めていかないといけないから
物理や数学の復習もしたいところです・・・
最終的に3DのアクションRPGゲーという目標はあるのでそこに必要なものが何かを考えながらいかないと
余計に歳を取ってしまいそうで心配ですね、今も微妙な年齢です――;
先ほども触れていましたが良書や良サイトがあれば何か教えていただきたい!
色々とすみません、無理にともいいませんので大丈夫です( _ _)ペコリ

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: C++わくわくゲームプログラミングのページ81

#20

投稿記事 by softya(ソフト屋) » 14年前

前著C言語~はやり遂げました さんが書きました:
softya(ソフト屋) さんが書きました: とりあえず立ち止まって足場固めはされるわけですね。
サンプルに機能を追加・変更したり、ゲームルールを変えてみるかはされないのでしょうか?そのほうが私は面白いと思うのですが。
例えば3Dモデリングソフトやフォトショプでもサンプルに変更を加えたりしませんでしたか?そんな感覚でいじってみてはどうでしょう?
その時に分からないことが出れば、C/C++の入門書などを調べれば良いでしょうし、ここで質問しても良いでしょう。
DirectXの本の方で自分が用意したXファイルを入れ替えたりまではしてみましたがルールの変更等は未だ行っていないです
これは知識の基礎がそろったら是非ともやってみたい!
クォータニオンやモデルのアニメーション等も全然勉強していないのでその穴も埋めていかないといけないから
物理や数学の復習もしたいところです・・・
最終的に3DのアクションRPGゲーという目標はあるのでそこに必要なものが何かを考えながらいかないと
余計に歳を取ってしまいそうで心配ですね、今も微妙な年齢です――;
先ほども触れていましたが良書や良サイトがあれば何か教えていただきたい!
色々とすみません、無理にともいいませんので大丈夫です( _ _)ペコリ
3DのアクションRPGともなると、1週間あたり20時間程度やっても少なくとも3年~5年とかのスパンで時間がかかる問題ですので慌ても良いことは余り無いともいます。
理解すべきことは、
・C/C++の文法
・大規模なプログラムの構成・設計技法 → オブジェクト指向設計
・基本的なアルゴリズム・データ構造の知識
・ゲームプログラミングに関する知識
・3Dに関する数学・物理学の知識とプログラミングの知識
・デバッグ技法
・ツールの作成手法
・スクリプト言語の開発やLuaの利用など。
など多岐にわたります。小さなことから積み重ねないと理解出来ないと言って良いでしょう。
私のお薦めとしては2Dで色んなゲームを作ってから3Dに進まれたほうが良いと思います。
いきなり、3Dから始めるのも本人の自由ですよ。ただし、3Dの簡単なものから始めてください。
いきなり人を歩かせると、そこから先どうして良いのか分からなくなると思います。
[追記]本来2Dでやる3目並べ、じゃんけん、テトリス、ブロック崩しなどをあえて3Dでやってみると言う話です。
初心者は2Dでも苦しむ代物ですが、3D処理の理解にはつながると思います。

で、PS2レベル画像の3Dゲームで良ければC言語とDXライブラリで作ることも出来ます。確かにC++を覚えたほうが大規模開発に向いていますが無くても出来ます。
時間を優先させるなら、こう言う選択肢もあると言うことで。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

前著C言語~はやり遂げました

Re: C++わくわくゲームプログラミングのページ81

#21

投稿記事 by 前著C言語~はやり遂げました » 14年前

softya(ソフト屋) さんが書きました: 3DのアクションRPGともなると、1週間あたり20時間程度やっても少なくとも3年~5年とかのスパンで時間がかかる問題ですので慌ても良いことは余り無いともいます。
理解すべきことは、
・C/C++の文法
・大規模なプログラムの構成・設計技法 → オブジェクト指向設計
・基本的なアルゴリズム・データ構造の知識
・ゲームプログラミングに関する知識
・3Dに関する数学・物理学の知識とプログラミングの知識
・デバッグ技法
・ツールの作成手法
・スクリプト言語の開発やLuaの利用など。
など多岐にわたります。小さなことから積み重ねないと理解出来ないと言って良いでしょう。
私のお薦めとしては2Dで色んなゲームを作ってから3Dに進まれたほうが良いと思います。
いきなり、3Dから始めるのも本人の自由ですよ。ただし、3Dの簡単なものから始めてください。
いきなり人を歩かせると、そこから先どうして良いのか分からなくなると思います。
[追記]本来2Dでやる3目並べ、じゃんけん、テトリス、ブロック崩しなどをあえて3Dでやってみると言う話です。
初心者は2Dでも苦しむ代物ですが、3D処理の理解にはつながると思います。

で、PS2レベル画像の3Dゲームで良ければC言語とDXライブラリで作ることも出来ます。確かにC++を覚えたほうが大規模開発に向いていますが無くても出来ます。
時間を優先させるなら、こう言う選択肢もあると言うことで。
返信ありがとうございます
色々なアドバイス大変助かりました
目論見としてはPS2レベル画像の3DゲームでDXライブラリを使用する方向で考えていたので(この本自体DXライブラリで進めてます)
方向性が間違っていなくて少し安心しました
まずはC/C++の文法、3Dに関する数学・物理学の知識とプログラミングの知識から固めていくことにします
C++のオブジェクト指向設計による大規模開発も実感しきれていないので理解していこうと思います
追記もチャレンジしていきますね

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: C++わくわくゲームプログラミングのページ81

#22

投稿記事 by softya(ソフト屋) » 14年前

一応書籍を紹介しておきます。
●言語
「Amazon.co.jp: 新版 明解C言語 入門編: 柴田望洋: 本」


「Amazon.co.jp: ロベールのC++入門講座: ロベール: 本」

C++の場合946ページもありますが、これだけでは全然足りないのですけどね。


●数学・物理・AI
「Amazon.co.jp: ゲーム開発のための数学・物理学入門 改訂版: ウェンディ・スターラー, 山下 恵美子: 本」

「Amazon.co.jp: 実例で学ぶゲーム3D数学: Fletcher Dunn, Ian Parberry, 松田 晃一: 本」

「Amazon.co.jp: ゲームのアルゴリズム 改訂版 思考ルーチンと物理シミュレーション: 橋口 ゆうすけ: 本」

「Amazon.co.jp: ゲーム開発者のためのAI入門: David M. Bourg, Glenn Seemann, 株式会社クイープ: 本」
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る