[C++]同じユーザ定義クラス間の比較についてコメントを頂いてからいろいろ考えた結果、比較すべきでないため比較演算子を実装すべきではないという結論に至りました。ありがとうございました。上のようなクラスについて考えた時に、次のような比較を行ったとします。operator<=()はoperator<()に実装を委譲すると基本的に考えることにします。1.2.について、どう動いているのかどう制御できるのか確かめたいので、そういうことをする文法はどのようなものですかと聞いたつもりで、また、3については下のようなことを想定しています。これらが再帰型の制御によって可能だろうかと考えるためです。これら1.2.3.は再帰型がどうして今回の質問で特殊化されるような特別な型なのかの明示であり、質問した事柄そのものではありません。これらは今回の質問で解決される事柄ではなく、今回の質問で解決された事柄で解決されうる問題だとと思います。templateで生まれうる再帰型に対する特別な制御の方法についてご指摘に対する答えになるかはわかりませんが、あくまで今回の質問は文法的な問題だと自分は思っています。これは私が質問前まで実装に使うことのできないパターンのひとつであり、目的を達成するためのより良い実装にするのに必要になるかもしれないパターンの一つだと考えたため質問しました。手段に関する質問だと私は思います。いういずれかもしくは両方をするつもりです。templateで生まれうる再帰型に対する特別な制御の方法について再起処理を含めたあまり良い説明が思いつかなかったので、質問内容とは少し異なりますがサンプルコードを載せておきます。理解へのきっかけとなれば幸いです。下記のコードは、ファイルから1行読み込み、カンマに区切られた各単語を指定した型へキャストしてtupleに格納するコードです。関数で型毎に振る舞いを分けています。stoiなど文字列から各型への変換を使用しています。templateで生まれうる再帰型に対する特別な制御の方法について部分特殊化である程度やりたいことは出来そうですが、再帰がより深い型に対して一々定義するのは避けたいのです。私の定義の仕方が悪く、よりよい方法があるのかもしれません。型のような再帰する全ての型(深さは問わない)とを別に扱いたいのです。[C++]private継承によるfriendなoperatorそういえば確かコピーコンストラクタが呼ばれるんでしたね。アドベンチャーゲーム制作ノベルゲームと推理アドベンチャーとで、どこで区別がつくのか自分にはよくわかりませんが、だいたいの場合はわざわざDXライブラリを使ってまでやりたいことが少しくらいあっても、吉里吉里等のツールを使って作った方が手間が少なく、それらで機能的に困ることもあまりないから楽なんじゃないかと思います。凝っていたと仰いますが、個人的には選択肢のあるマルチエンディングのノベルゲームと比べて特異なことをやっているようには見えない(推理小説的な意味合いでは凝っているのかもしれませんが)ので似たようなことはどちらでも出来ると思います。[C++]private継承によるfriendなoperator皆さん返信していただきありがとうございました。「privateで継承されるクラスが委譲の時に内部で要求する関数とそれによって実装される関数の2つの関数を持っていなければならない」という先入観があった事が今回の心理的な原因の一つかもしれません。御三方の返信を見て思いました。const変数同士で式を形成しているとそうなりますね。Addableの方でも以下のようにするとエラー出ますよ。)がでますが、下のコードだとリンクエラーがでませんでした。自分には似たようなことをしている2クラスに見えますし、エラーが出る方はエラーが出ない方のコードのコピーからほとんど出来ているといえると思います。[雑談]あけましておめでとうございます。今年も皆様の益々のご活躍を心よりお祈り申し上げます。進捗いかがですか初心に帰ること常に別のことや反対のことを意識することもう少し視野や行動範囲を広げることPHP等のC++以外の言語にも手を出すことより真人間らしく振舞うこと楽しむことC++における技術と知識の向上などを意識しながらやれるだけやってみるを今年の抱負とさせていただきます。位置じゃなく変数の値を確認してください。図形の描画の場合も、描画色が背景色と同じかよく似たものになっていないか確認してください。設定などを疑うのであればここからダウンロードしたものと比較等するか、DxLibについてくるサンプルさえ動かないのか、Dxlibが最新のものか、DxLib_Init関数がエラーを返していないか等を確かめてください。画像表示LoadGraph後のHandleに適切な値が入っているか確認してください。【雑談】もし強制させたい項目があるのであれば、それなしに投稿することが出来ないようにするのが良いと言うのは私もそう思います。加えて投稿数だとかに制限があっても構わないと思います。個人的にこの掲示板でなんやかんや知ろうとするよりかは検索してしまった方がずっと良い気がしてきて、だいたいは他人の日記とかを見るためにログインしてるので、もしかしたら知らない変更があるのかもしれません。//0から9を分割したのち配列img_numにしまう。この部分にどういう意図があるんでしょうか。同名の画像ファイルがそれぞれの階層に存在しない限りimg_num[1]~img_num[9]に有効なグラフィックハンドルが入ることはないような気がしますし、同じ変数に同じ画像を二回ロードする意図がわかりません(厳密には同じではないかもしれませんけど)。24章で躓いてしまいました。24章で躓いてしまいました。このページでしょうか。インクルード等しっかりされているか確認するのが良いと思います。毎回変数名や関数名をタイプしているのなら誤字も疑うと良いかもしれません。キー制御について基本的にカウントかフラグで管理するのが分かりやすく一般的な方法だと思いますし、それでごちゃごちゃするというのは別の問題だと思います。何度も登場する処理を関数やクラスと言う容易に再利用できる形にしないことがごちゃごちゃしたコードの原因ではないか、もう一度コードを見直してみてはいかがでしょうか。汎用ゲーム開発ツールを作ってみましたLuaの文法とかはよくわからないので色々試すなんてことは出来ませんでしたが、サンプルは気になるのを一通り見ました。サンプルの炎エフェクトに利用されている画像fire2.pngの所為か、少し見た目がおかしい気がしました(下のBefore.png:中央が赤で外側ほど透明な四角形が沢山くるくる回っているように見える)。画像fire2.pngにAzPainter2で暗いものほど透明にする処理を加えたものと差し換えた結果、画像After.pngのようになりました。サンプルなのでどうでもいいのかもしれませんが一応報告します。iteratorはデクリメントできない」というようなものだと思います。ようなことが、今回提示されたようなコードでは起こっているのかもしれません。助けてください、スクロールとオブジェクト発生について発生ラインが前に進んだら、オブジェクトの生成は遅くなりますね。間違いましたすいません。言ったら小さいと320*240くらい、多いのは640*480あたり、とりあえず640*480だと仮定します。仮に既にラインのx値の増大が原因と考えられるのならば、そのラインのx値に手を加える部分で正しい値が加算されているのかどうか、その値を利用する部分で不要な書き換えを行っていないか、がわかるようなコードを示さないと原因は分からない気がします。単純にインデントを私が見やすいようにそろえたという例なので、正しいかどうかはよく見てません。エラーコードを貼る場合はコードタグを使ってください。インデントももう少し見やすくしたらいかがでしょうか。宣言はヘッダファイルに、定義は.cppファイルに書く場合が多いと思うのですが、.ccpファイルにまとめた理由はなんでしょうか。ファイル分割し、多重インクルードガードをすればある程度エラーは減ると思います。ファイル分割やインクルードガードが分からなくとも、それらは検索やC++学習サイトを確認することで、すぐに分かると思います。見る限り範囲外アクセス等が原因みたいですが、DrawMaskのエラーについては正しい使い方をしていない等、別の原因の可能性もないとは言えないと思います。こちらでは出ないエラーですので何ともいえません。私が知らないだけでちゃん意図通り動くのかもしれませんけども。新C言語~ゲームプログラミングの館~のs.6章についてお使いになっているDXライブラリは最新のものでしょうか?もしかしたらこういうことか、それに似た状況なのかもしれません。ハンドルされていない例外dataは構造体でしょうか。dataが構造体かクラスなら、コンストラクタのときに初期化リスト等で初期値を与えましたか?なんとなくですが、その値はゴミ(初期値を与えないときに入っている適当な値)なんじゃないかと思います。あれば、csvファイルに値が十分な個数あるのか、その値を必要なだけ読み取って利用できるようになっているのか、利用する段階できちんと初期化/代入などにその値を全て使っているかを、カウントしてみる。ハッシュ値で整合性を確かめる等、どこでファイルのデータ値が変数に想定どおりの形で入らなくなったのかを調べればいいと思います。大部分のゲーム本体で使う変数やインスタンスを生成するのが、メニュー画面より前かメニュー画面で行われるならもしかしたら支障があるかもしれませんが、基本的には問題ないと思います。配列やポインタの範囲外アクセスではないとしたら、もしかしたら上のCreateMaskScreen関数とDeleteMaskScreen関数をここ(ループの中)に置いたことが何か良くないのかもしれません。}Enemyクラスのコンストラクタにおける上のようなコードで範囲外アクセスが起きていませんか?teki.item_n,item_nの両方の配列数が6以上であることが確実だと言えますか?もしくはこの部分に関するコードのコメントアウトなどで、エラーがなくなるかどうか試すことは出来ますか?とりあえずこの「6」という数字が何度もitem_nについて登場するのならば、それを変数やマクロに定義し、マジックナンバー的表記を避けるべきだと思います。新C言語~ゲームプログラミングの館~のs.6章について配列などで範囲外アクセスなどはありませんか?適当に試してみましたが、マスク関係の関数や描画関係の関数自体の問題ではなさそうな気がします。main.cppでは直接にstateKey変数を扱ってはいません。それ自体が見えるようにする必要がありません。main.cppに書かないでkey.cppに書いたということは、弱いものではありますが、key.cppやそれに関連するファイルのみでのみ、stateKey変数を扱うつもりであるという隠蔽の意図があるのだと思います。大規模になったとしてもファイル分割しないよりはmain.cppをきれいなままにしておくことが出来るということなので、まだこれくらいの規模だとどっちでもいい感じはするかもしれません。戻り値の型と関数の型が一致しません。戻り値の型と関数の型が一致しません。エラーコードなりエラーの原因となる行が分かっているならそれを明示してください。解決になるかは分かりませんが、fanc関数の戻り値型はvoidとなっているのにlist[d].nameをreturnしてはいけないと思います。文字にフリガナを付ける方法(DxLib)どうしてもそのような表示にこだわるのなら別ですが、「漢字(フリガナ)」というような記述ならコードも外部ファイルもより簡単なものになるんじゃないかと思います。自作:描画クラスについて完全に解決しなくとも、どの程度どのような方法で解決できそうなのか、もしくはどの程度解決されたのかを明確にしていただければ、今後第三者がここのやり取りを見て参考にできると思うので、私個人は条件さえ満たせば解決で問題ないかと思います。自作:描画クラスについておおよそそれであっていますが、CGraphクラスが随分沢山のクラスを継承しているように思われます。本当に継承で表現すべき関係なのかを考えてみてください。スクロールバーとウィンドウのように、あるクラスAで表現されるものがクラスBで表現するものに複数あったとしても何もおかしくないようなら、それは継承ではなくインスタンスを持たせる等にすべきかと思います。他にも様々な考え方とクラス同士の関係があるので、それらしいものを調べるなりして選んでください。どれが適切かは作っている本人が判断すべきだと思うのです。自作:描画クラスについて描画クラスはあくまで描画を行うクラスであるはずです。座標などの情報がもちろん必要になるでしょうが、それはこのクラス以外にもいえることだと思います。それならば必要な座標などの情報をこのように扱うのではなく、座標クラスや画像ハンドルクラス等のクラスをあらかじめ作っておき、描画クラスがそれらのインスタンスを持つような構造にするほうが、(あくまで私の個人的な好みに過ぎませんが)望ましいかと思います。動的2次元配列(new)についてお聞きしたいことが...。動的2次元配列(new)についてお聞きしたいことが...。Mapクラスのメンバ関数は静的ですが、メンバであるmapやold_limit_hは静的ではない(staticで修飾されていない)ですよね。main関数や他の関数でどう呼び出しているかわからないので推測ですが、Mapクラスの実体を作らずに関数を使用しようとしたため、実体の無いMap::mapやMap::old_limit_hをその関数で利用することができないと言う旨のエラーではないでしょうか。次からはエラーの番号(と言って良いのか分かりませんが)もぜひ載せてください。【Dxlib使用】当たり判定プログラムの設計についてプレイヤーとオブジェクトの当たり判定は行いますが基本的にオブジェクトとオブジェクトの当たり判定は行いません。これではややこしいので少し質問を変えさせて頂きたいと思いました。「Dxlib3D基本アクション」のページで当たり判定を行なっている部分があります。返答ありがとうございます。実は全てのオブジェクトに共通するObjectクラスを作ってありました。そこにHitcheck関数ってみようと思います。その設計が適切なら何も言いませんが、すべてのObjectが自身とその他との衝突を調べるというのはあまり適切ではないだろう、と書いたつもりです。【Dxlib使用】当たり判定プログラムの設計についてどのクラスに当たり判定のジャッジをさせるつもりかは分かりませんが、各オブジェクト同士の判定を行うのならば、その各オブジェクトに判定の機能をもたせるのではなく、判定専用のクラスを作るほうが良いかもしれません。その判定専用クラスは、(必要であれば)互いにぶつかりうるオブジェクトそれぞれに当たり判定の結果の情報を渡すような機能も持っているようなものになると思います。椅子のベースクラスと当たり判定のベースクラス(?)はまったくの別物だと思います。一緒にしてしまう設計も出来るでしょうし、それがより適切な状況もあるかもしれませんが・・・。【Dxlib使用】当たり判定プログラムの設計についてC++をある程度しっている前提で話します。オーバーロードとクラスの継承で大部分が解決できる問題かと思います。椅子なら基底椅子モデルクラスを作り、それを継承したソファーなり背もたれ付き椅子なり(どうクラスわけするのが適切かは分かりませんが)様々な椅子を作ります。基底椅子クラスオブジェクトに対する処理だけでは足りないなら、派生椅子クラスごとに適切な処理を行う関数を作ることになると思います。この掲示板でも特にSTGの敵の種類と自機弾との関係のような、似たような質問が幾つか見つかるかと思います。少なくとも自分にとっては質問が抽象的過ぎて、これ以上は書けませんよ。考え方って言ったって、さっき書いたものから、誰かが必要な形にコード化できる程度の情報が読み取れるように意識したつもりなんですが、厳しいでしょうか。当然ですが、あなたが要求しているトリガーとして働くオブジェクトなり関数なりが、どんなものなのか詳細に分かるのはあなただけです。ある程度コード化できるくらいに思考を整理しないと、質問の意図は理解してもらえないでしょうし、回答もちぐはぐなものが増えるでしょう。キーボードの取得関係つまり、zキーを押した瞬間、押し続けていようが離そうが255になるまでbrtの加算を続ける処理をしたいのです。「zキーを押した瞬間」というのがよく分かりませんが、一回zキーの入力があったら何かしら処理をするというトリガーのようなものですか。瞬間というからにはその関数が呼ばれるたびにあっというまに255まで増加するかのような印象を受けますが、平行して他の処理もということですし、呼ばれるたびに255まで増加するのか、呼ばれた回数*係数分増加するような、数回呼ばれてはじめて255まで増加するのか、よくわかりません。(*this)を返すメンバ関数を持つクラス解決しました。テンプレ-トクラスの定義をcppファイルで行おうとしていたので、すべてヘッダで行うように書き換えたことと、指摘された箇所にconst修飾子を加えたことでコンパイルエラーがなくなりました。さん、かずまさん、分かりやすい御指摘ありがとうございました。次のようなクラスを作りました。char配列をint型に代入する方法について修正した部分だけ見せられても、「どんなコードで書かれた、どんなプログラムのどこが悪いから、この方法で解決できた!」なんて言える人はそう多くはないと思います。要するに原理を教えてもらおうとするには、情報が少なすぎませんか、と言いたいのです。コードを載せる場合はコードタグをご利用ください。直に書かれても見難いです。言語の親和性について出来ると思います。簡単かつ短いものなのに、自分で試さなかったのはなぜでしょう。http://ideone.com/vqCD0e関係ないでしょうがその例であれば、記法をどちらかに統一したほうが良いかと思います。使いたいのですが、理解できません異なるクラスを同じ名前で使いたいのならば、共通の基底クラスをそれぞれが継承して、基底クラス型で実体を作ってやればいいのではないでしょうか。if文やswitch文のreturnで「newしたポインタ等」を返すことになると思います。いずれにしてもそれぞれ子クラスの実体が同時に複数存在しないことになりそうですが。型に応じた振る舞いはそれぞれの子クラスに記述したり、type_infoで判断してやれば、なんとかなるかもしれません。{0};と言う方法で初期化することになると思います。それよりもまず、配列の次元が多いので、何らかの方法で整理するのが望ましいと思います。Tについてはバグという認識でいきます。構想に過ぎないので、他所から切り替えの判断上を受け取るのはおかしいと言われても、しっくりきません。他所から切り替えの情報を受け取る例を考えたことはないですし、思いつかないです。必要なものだと思い込んだのでしょう。これはちょっとよく分からないですが、多分他所から判断材料を得ようとする設計と関連する部分なのだと解釈します。templateクラス下のコードもVC++2010では通るようです。ideoneで何故通らないかは分かりません。Report関数について:簡単に纏めると現在の状態を型で判断しようと思っていて、現在の状態を知るために子クラスに自身の型を返させる(=Report関数)という方法をとったからです。467templateクラス1.テンプレートクラスを作ろうと思っています。一つ目の記述は分かりますが、二つ目の記述はどういうことになるのでしょうか。classのTとtypenameのTは別のものなのでしょうか。そもそも型の決定はどうすればよいのでしょう。2.Stateパターンのような構造を作ろうと考えています。今のところ考えているのは、切り替えることのできる状態を表現するのにとりあえず状態親クラス1つと状態子クラス複数、マネージャークラス等を考えています。ファイルを読み込まなくなった?構造体にしておけば、後で項目増えても構造体への追加ですみますが、バラバラにすれば項目ごとの処理を書く必要が出てくるのではないでしょうか。読み取りにしろ書き出すにしろ、そういう処理をするデータなら、そういう名前の構造体なり変数なりに纏めたりしたほうが分かりやすいはずです。以上の2つの理由から構造体にしたほうが良いと私は思います。c言語初心者のくだらない質問4さっき自分が言ったのは大体こういうことです。分け方については、あまり関係のないものを纏めてしまうと、広い範囲で使うことが難しくなるからです。今回は短いので別にかまわないでしょう。c言語初心者のくだらない質問4九九の結果と「|」を表示するような、段を引数にとる関数を作るのはどうでしょう。最初にそれを呼び出して、次にfor文に段を表示する処理と一緒に入れてしまえば大体解決すると思います。本当はできるだけ、こういうわけ方をすべきではないと思います。c言語初心者のくだらない質問4for文が重なると厄介に感じるかもしれませんが、for文中の関数などの処理と同じように考えれば問題ないと思います。外側のfor文に必要な処理くわえれば大体終わりです。ファイルからコードを読み込むDxライブラリならファイル読み込み関係の関数,C言語ならFILE構造体を用いたもの,C++ならファイルストリームでファイルからデータを読み込むことが出来ると思います。読み込んだデータはあくまでコードではなくデータだと思います。そのデータを解釈し、命令として受け取らせるスクリプトのようなもので追加していくことになるのではないでしょうか。~)の二つのTの型が同じでないといけないようです。一応以下のように変更してみたところ、動きました。「絵を描いて写す」だから「描写」でいいか、と思っていたからです。その「映す」も言われてみると良いですね。スクリーンに「映す」わけですから。自分が言っていたのはあくまでコピーや写真といった「正確に複製する、写し取る」というような意味合いの「写す」です。用意された画像を画面なり裏画面なりにコピーしている(ように少なくとも私には思える)ので「写す」です。少なくとも、自分にとっては分かりやすいです。正直な話、「描いて写す」という意味がないらしいことは知りませんでした。書き換える方法さまざまな意見があるようですが、今まであまり意識せずに「描写」という表現をしていた自分としては、少なくとも他者と情報のやり取りをする上では自分と他者が、同一の物を指すと認識するような単語を使うべきなのかな、と思いました。掲示板やチャットでは「描画」を使うべきなんでしょう。「描写」を使っていた理由を挙げるなら「描画」という言葉を「描画」と認識していなかったのと、「絵を描いて写す」だから「描写」でいいか、と思っていたからです。個人の設計のメモで、誤解しないなら使う程度に利用は控えるべきなのでしょう。待機プログラム正直な話、その文からは上手くいっていないということしか分かりません。どんな関数を使っているのかもわからないので、何が問題なのかも分かりません。ある間違いとして、初心者は待機のつもりでsleep関数で処理を止めてしまうらしいですね。反転ではなく反映ですかね?反転処理と言うと、一般的には鏡に映したような画像処理を指すと思います。部分描写はSetDrawArea関数が近いと思いますがどうでしょう。このような関数を利用して、「表示が変わるものだけを描写しなおす」という処理の関数を自分で作ることになるでしょう。基本的には描写しなおす可能性のある領域は再最描写するのがベターで、描写領域を何度も変動させるべきではないと思います。なにより楽ですし、基本的にコストが増大するのではないでしょうか。絶対パスでしか画像や音声ファイルが読み込めなくて困ってます。絶対パスでしか画像や音声ファイルが読み込めなくて困ってます。いってもC言語やDXライブラリの問題ではありません。ファイルの階層構造の問題なのでそれについて解説されたサイトなんかを見れば、分かっていただけると思います。初心者です.言葉だけで説明するよりも、コードを載せたほうが絶対に分かりやすいですよね。警告なんかも識別できるナンバーごとコピーペーストするのがベターだと思います。コードを載せる場合はコードタグをご利用ください。DXライブラリを使ったゲーム制作で・・・コードタグとインデントで見やすく整理したほうが、ミスが減ると思いますし、問題が分かりやすくなるので今後お願いします。最後にDxlib_End関数が無いのは、結構まずいような気がします。定石が知りたいのであれば、ここで「タイトル画面」等で検索するのが手っ取り早いと思います。(うまく貼れるか分かりませんが、)これとか該当するんじゃないでしょうか。http://dixq.net/forum/viewtopic.php?f=3&t=8584コードを載せない限り、具体的な解決策を挙げるのは難しいと思うので、コードを載せたらいかがでしょう。今後、同じ問題で困っている人も助かるかもしれませんし。待機画面が一瞬で終わるのなら、待機画面でループしていないのかもしれません。メモリリークの検出すいません。逆でしたね;ヘッダに書いておけば、何度も#ifndef~と書かなくていい、ということですよね。メモリリークの検出CTRL+F5で実行していました。F5のみでの実行で、検出できることを確認しました。PART_H#endifこの部分は指摘されるまで気がつきませんでした。多重インクルードの回避としてはcppに記述する方が一般的なのですね。考えてみれば、一回の記述ですみますし・・・ありがとうございました。解決とさせていただきます。619メモリリークの検出メモリリークの検出に_CrtSetDbgFlag関数を用いようとしていますが、上手くいきません。継承についてぱっと見ただけですが、クラスunit,Eunit,いずれも仮引数をもつコンストラクタがあるように思われました。派生クラスのインスタンス生成したら基底・派生の両方のコンストラクタが呼ばれます。例では基底クラスのコンストラクタに引数を渡せていません。オーバーロード等されていないようですので、エラーとなるでしょう。継承とコンストラクタについて調べることをお勧めします。基本的にあってはならない構造だと思います。ロードは一回だけ、何度もやるのは描写の処理です。他にも何度もする必要がないものはループに入れないでください。エフェクトについてeffect.cppは龍神録のフォルダにあります。この説明からそちらがどのような状況なのか、分かることはほとんどありません。1章と2章と言われてもフォルダかファイルかで解決策は多少異なるでしょう。具体的にどのような階層構造をとっているのかを説明してくださいね。エフェクトについておそらく自機弾の構造体cshotが見つからないのだと思います。この処理のどちらかがされていないのではないですか。参考にして自力でコードを書いた結果エラーが出たのか、誰も分からないので答えようが無いと思います。問題ありそうなコードとエラー文を載せてもらってもいいでしょうか。解決につながるか分かりませんが、障害物の端の点と点Aの接線を利用する方法が以前掲示板に挙げられていたかと思います。ある程度目的や目標があるのであれば全然そのままで構わないとも思います。「この敵で時間を稼ぎたい」とかでしょうか。玉で埋まるのを未然に防ぐかを選択可能にするなら柔らかい方が望ましいでしょうね。それは私の腕が未熟だからであってそのままで問題ないでしょう。ミクプラは自由にリンクできます。