検索結果 32 件

by 長峰
9年前
フォーラム: C言語何でも質問掲示板
トピック: VS2013の設定でC++テンプレートのスペース自動挿入を止めたい。
返信数: 4
閲覧数: 2919

Re: VS2013の設定でC++テンプレートのスペース自動挿入を止めたい。

VisualStudio2013 は C++11 に (完全ではありませんが) 対応しているため、 std::vector<std::vector<T>>; と書いてもコンパイルエラーになりません。 しかしこのコードは、例えば VisualStudio2008 でコンパイルすることはできません。 すこし気持ち悪い整形ですが、移植性を高めるという意味で従っておくのが無難ではないでしょうか。 ただし止められるのは『自動で』の部分だけなので、手動で該当箇所を整形すると変更されてしまいます。 Visual Studioの設定では変更できないのですね。 古いコンパイラを使う予定はありませんが、移植性が...
by 長峰
9年前
フォーラム: C言語何でも質問掲示板
トピック: VS2013の設定でC++テンプレートのスペース自動挿入を止めたい。
返信数: 4
閲覧数: 2919

VS2013の設定でC++テンプレートのスペース自動挿入を止めたい。

現状Visual Studio 2013でC++のテンプレートを書くと、<>の間にスペースが自動挿入されます。挿入されないよう設定を変えたいのですが、 Options→Text Editer→C/C++→Formating→Spacingに該当する項目がなく困っています。 スペースの自動挿入を止める方法を教えてください。 //このままがいい template<typename T> using JaggedArray = std::vector<std::vector<T>>; //スペース自動挿入後 template<typename T> using JaggedArray = std::...
by 長峰
9年前
フォーラム: C言語何でも質問掲示板
トピック: スコープの階層化について
返信数: 13
閲覧数: 6094

Re: スコープの階層化について

5日も間隔を空けてしまいましたが、皆さんから見聞きした意見を元に自分の結論をまとめてお開きとさせて頂きます。 ・ファイルスコープは名前空間で階層化でき、関数内ではブロックで階層化できるものの、クラススコープは継承による階層化ができるのみで、純粋なサポートはされていない。 ・クラス内に作られた入れ子クラスには外側クラスのスコープが適用されるので、外側クラスのインスタンスを通してprivateメンバへアクセスできる。これによって、入れ子クラスで外側クラスの参照を保持すれば擬似的な階層化ができる。 返信をくださった皆さん、遅くなりましたがありがとうございました。 実装自体は再帰関数ではなくループ構文...
by 長峰
9年前
フォーラム: C言語何でも質問掲示板
トピック: スコープの階層化について
返信数: 13
閲覧数: 6094

Re: スコープの階層化について

皆さん返信ありがとうございます。 usaoさん やっぱり自分のアプローチが適切でなかったようですね。 発想を変えて、文法上の再帰処理を用いずに、スタックを用いた深さ優先探索のような実装ではできないものでしょうか? 深さ優先探索について調べましたがどういった使い方をするのか検討がつきませんでした。 関数から繰り返し構文にして、調べたオブジェクトを配列に入れていくということでしょうか? nullptrさん 納得のあまり言うことがなくなってしまいましたが、ありがとうございます。 関数オブジェクトは情報だけは知っていたのですが、変更する全てのメンバの参照を持たないといけないと思って避けていました。 考...
by 長峰
9年前
フォーラム: C言語何でも質問掲示板
トピック: スコープの階層化について
返信数: 13
閲覧数: 6094

Re: スコープの階層化について

nullptrさん、回答ありがとうございます。 再帰関数そのものをローカルにしてしまえば簡単。 再帰関数をメンバ関数にする必要はなかったので、しっくりくる感じがします。 ただ、無名関数の再帰は初めてなので不安です。関数内で名前付きの関数が宣言できればいいのですが。 そもそもの話、質問内容の状況があまり考えられないのですが。大抵の場合はその部分を別の部品としてクラス外に吐き出せるのではないでしょうか。 この関数は全てのメンバ変数を扱うものだったのでクラス内で作ったほうが収まりがいいと思ったのです。 具体的にはこの関数内でオブジェクトの押し出し判定を行い、押せる状況なら、連鎖的にオブジェクトを一方...
by 長峰
9年前
フォーラム: C言語何でも質問掲示板
トピック: スコープの階層化について
返信数: 13
閲覧数: 6094

Re: スコープの階層化について

みけCATさん、サンプルをありがとうございます。
こういった入れ子クラスで、内側のクラスから外側のクラスのメンバ変数にはどうやってアクセスしたらいいでしょうか。
by 長峰
9年前
フォーラム: C言語何でも質問掲示板
トピック: スコープの階層化について
返信数: 13
閲覧数: 6094

Re: スコープの階層化について

usaoさん、回答ありがとうございます。
usao さんが書きました:メンバ変数ではダメなのでしょうか?
すごく一時的な変数なので、これを他のメンバ変数と一緒にするのは何か違う気がしています。
by 長峰
9年前
フォーラム: C言語何でも質問掲示板
トピック: スコープの階層化について
返信数: 13
閲覧数: 6094

スコープの階層化について

C++のスコープについて困っています。

特定のメンバ関数のみで扱う変数があり、それをその関数内で宣言しました。
そのメンバ関数で新たに再帰処理が必要になったので、同じクラスの別メンバとして再帰関数を作りそれを呼び出すようにしたのですが、その関数では変数が参照できませんでした。
現状、引数として渡していますが、何度も呼び出される再帰関数なので非効率的で変だと思っています。

クラススコープの下に2つのメンバ関数で共有する変数をおくスコープがあれば上手くいく感じがしています。
こういった場合、スコープを階層化するにはどうしたらいいでしょうか?
by 長峰
10年前
フォーラム: C言語何でも質問掲示板
トピック: 分割コンパイルの時の関数の使い方を教えてください
返信数: 5
閲覧数: 2327

Re: 分割コンパイルの時の関数の使い方を教えてください

私も初心者ですが、似たような経験があるので調べたことを載せておきます。 ssさんが使っている変数opは、プログラム中のもっとも外側のブロックで宣言されているため、グローバル変数になっています。 グローバル変数は、プログラム全体に対して定義される変数ではありますが、 宣言の有効な範囲がプログラム全体に及ばず、同じファイル内のみで有効なファイルスコープになっています。 そのため、他の回答者の方々がおっしゃる通り、externを使って宣言のみを行うか、ヘッダーをインクルードして、変数を使用している部分を有効範囲に含める必要があります。 参考までにグローバル変数の概要と、スコープのWikiへのリンクを...
by 長峰
10年前
フォーラム: C言語何でも質問掲示板
トピック: カプセル化について
返信数: 9
閲覧数: 2895

Re: カプセル化について

返信が遅くなってごめんなさい。 voidは戻り値の型です。メンバ関数のポインタですので型として戻り値の型も必要です。 関数のポンタの渡し方を知りませんでした。 勘違いが解けて良かったです。 2つ目のコードを参考しました。 SequenceOrderをクラス化するとかなり便利になりますね。 クラスの再利用性も高そうなので、Sequenceの階層を簡単に作れそうです。 コードの整理はまだついていませんが、 どのようにクラスを作ってカプセル化を行うか、見当がつきましたので本トピックを解決とさせていただきます。 意見をくれたusaoさん、 コードを2つ書いて下さったsoftyaさん、大変ありがとうござ...
by 長峰
10年前
フォーラム: C言語何でも質問掲示板
トピック: カプセル化について
返信数: 9
閲覧数: 2895

Re: カプセル化について

お二方ともご意見ありがとうございます。 オブジェクトを2つ作るって意味じゃなくても、クラスと関数の2つに依存していると分かりづらくなると思うわけです。 別のプロジェクトへの使い回しもややこしくなります。 そうですね。自分も依存関係は最小限に抑えたいと思っています。 あと、orderを関数じゃなくクラスにして委譲してPraimaryManagerからSequenceの子クラスに参照で渡したほうが良いじゃないかと思いました。 orderをどこに委譲するのでしょうか? そのためのクラスだと思います。あとバグが生まれづらくなる工夫も必要かと。ちゃんと書けばバグの抑制には役立ちます。 それじゃなければ、...
by 長峰
10年前
フォーラム: C言語何でも質問掲示板
トピック: カプセル化について
返信数: 9
閲覧数: 2895

Re: カプセル化について

softya(ソフト屋)さん回答ありがとうございます。 orderを書き換える、参照する、保持するクラスを1つにまとめて外部から直接触れないようにすればカプセル化になります。 それをするとすごい使いにくくなりませんか? カプセル化は、オブジェクトの内部の仕様を隠ぺいすることで再利用性と不用意な書き換えによるバグを防ぐのが目的です。 PraimaryManagerのオブジェクトを2つ作った場合、どちらも1つの外部のorderの影響を受けますので利便性は高くないですよね。 これは再利用性が低いことを意味しますので、せっかくのオブジェクト指向が生きてきていません。 自分としては、PraimaryMa...
by 長峰
10年前
フォーラム: C言語何でも質問掲示板
トピック: カプセル化について
返信数: 9
閲覧数: 2895

カプセル化について

シーケンス遷移の制御をするプログラムを作りたくて、実装方法を色々と参考しました。 それを元に、コードを組んだのですが、随分オープンなコードになってしまいました。 こういったコードを必要な部分だけが見れる様に、カプセル化するにはどうしたらいいでしょうか。 また、そもそもカプセル化とは何なのかが判りません、コードを内部結合にするだけでカプセル化になるのでしょうか。教えてください。 #include<iostream> enum SequenceType{ NONE, START_MENU, MAIN_GAME }; SequenceType order=NONE; void SendOrder(S...
by 長峰
10年前
フォーラム: C言語何でも質問掲示板
トピック: 付属ライブラリのコンパイルの仕方
返信数: 3
閲覧数: 3074

Re: 付属ライブラリのコンパイルの仕方

お二方とも回答ありがとうございます。
途中、いくつか関数のエラーが出ましたが、指示通りにやることで、コンパイルすることが出来ました。
返信が遅くなって申し訳ないですが、無事解決しました。お力添えに感謝します。
by 長峰
10年前
フォーラム: C言語何でも質問掲示板
トピック: 付属ライブラリのコンパイルの仕方
返信数: 3
閲覧数: 3074

付属ライブラリのコンパイルの仕方

ゲームプログラマになる前に覚えておきたい技術という書籍に付属しているライブラリが私の使っているVisual Studio 2013に対応していません。
サポートを行っているサイトも見ましたが、2012年版までしか修正版サンプルファイルがアップロードされておらず困っています。
http://www.shuwasystem.co.jp/support/79 ... 118.html#1

バージョンアップに対応するため、自分でコンパイルしようと思うのですがどういった手順で行えばいいのか分かりません。知恵を貸してください。
by 長峰
10年前
フォーラム: C言語何でも質問掲示板
トピック: 同じ変数をまとめたい
返信数: 2
閲覧数: 1771

Re: 同じ変数をまとめたい

Pocoさん、回答ありがとうございます。 テンプレートクラスのwidth,heightには、Stateのwidth,heightと同じ数値が入り、関数での変更もなく、常に3つとも同じ値をとるので、まとめたいと思っていました。 質問して何ですが、質問時に望んでいた結果自体は、State側の変数にstaticをつけクラス外で定義をし、テンプレートをStateクラスに入れ込むことで得られました。 しかし、Pocoさんの回答と重なる部分だと思うのですが、テンプレートクラスが機能していないことに気がつきました。テンプレートクラスの使い方をいろいろと間違っていたようなので使用方法をちゃんと考えたいと思いま...
by 長峰
10年前
フォーラム: C言語何でも質問掲示板
トピック: 同じ変数をまとめたい
返信数: 2
閲覧数: 1771

同じ変数をまとめたい

調べてわからなかったので質問します。 ステージの縦と横の長さに当たるwidthとheightをまとめたいのですが、方法がわかりません。 テンプレートを使ったクラスで2つ、Stateの方でも1つの計3つ、同じ変数が出来てしまっており、これらをまとめようと思ったのですが、自力でやろうとするとどうしてもテンプレートクラスを崩すやり方しか思いつきませんでした。テンプレートをStateクラスの下位クラスとするなど(?)して変数のスコープを伸ばすやり方はありませんか。回答をお願いします。 ※下記コードの元は、SEGAのプログラミング本にある"荷物くん"というコードです。 #include <fstream...
by 長峰
10年前
フォーラム: C言語何でも質問掲示板
トピック: 文字をウィンドウに表示したい
返信数: 12
閲覧数: 4061

Re: 文字をウィンドウに表示したい

softya(ソフト屋) さんが書きました:.NET FrameWorkを使ったウィンドウ関係全てです。
コンソールアプリやDLLの作成はC++/CLIを使ったCLRでVS2013でも続けて利用可能ですね。
つまり、最新版でウィンドウを使う以上は、C#が必須ということですか。
早めに使いたかったことを考えると、残念ですが、
いい機会だということでC#もかじっていきたいと思います。
by 長峰
10年前
フォーラム: C言語何でも質問掲示板
トピック: 文字をウィンドウに表示したい
返信数: 12
閲覧数: 4061

Re: 文字をウィンドウに表示したい

softya(ソフト屋) さんが書きました:マイクロソフトとしては、GUIでC++/CLI(CLR Windowフォーム)を使ってもらいたくない様なのでC#を検討された方が良いと思います。
老婆心に感謝です。
どの程度までがGUIなのかよく分かりませんが、
C#にも興味がありますので、不便ということでしたら利用していきたいと思います。
by 長峰
10年前
フォーラム: C言語何でも質問掲示板
トピック: 文字をウィンドウに表示したい
返信数: 12
閲覧数: 4061

Re: 文字をウィンドウに表示したい

例を見て、DxLibのありがたみがわかった気がします。 未知の所が多いですが、ウィンドウプロシージャのWM_PAINTのところで処理を作っていく様なイメージが出来ました。 処理をうまく関数化できるよう、ちょっと気合入れてみます。 ダウンロードしたリファレンスは、いつも検索でトップに出てくるMSDNを見て苦しんでいたので非常に助かります。 これを見て理解していきたいと思います。 逆にクラスを使わない実装が思いつきません。下手なことは言えなそうですが… クラスで実装してみます。あと、阿澄佳奈さんは私も好きです。 件名であるウィンドウへの表示方法が分かりましたので、解決とさせて頂きます。 みけCAT...
by 長峰
10年前
フォーラム: C言語何でも質問掲示板
トピック: 文字をウィンドウに表示したい
返信数: 12
閲覧数: 4061

Re: 文字をウィンドウに表示したい

書き忘れましたが、coutは既存のものを使っています。独自定義ではないです。
by 長峰
10年前
フォーラム: C言語何でも質問掲示板
トピック: 文字をウィンドウに表示したい
返信数: 12
閲覧数: 4061

Re: 文字をウィンドウに表示したい

返信ありがとうございます。 言語はC++でOSはWindows(7)です。 APIはよくわかりませんが今使ってるのは多分Windows 32APIです。 できれば、今後は.NET Frameworkを使っていきたいです。 大まかに言うと、ウィンドウを開く処理と、開いたウィンドウに文字を描画する処理です。 Windows APIの場合、メッセージ処理も必要になります。 こういった関数はどこで詳しく調べられますか? 適切なラッパを作れば可能だと思います。 「演算子のオーバーロード」を使用します。 前処理やオーバーロードは関連したクラスを作ってやるのが適切なんでしょうか? 今ひとつイメージがつかめま...
by 長峰
10年前
フォーラム: C言語何でも質問掲示板
トピック: 文字をウィンドウに表示したい
返信数: 12
閲覧数: 4061

文字をウィンドウに表示したい

文字をウィンドウに表示したいです。
coutでストリームに出力するやり方を覚えたのですが、コンソール画面にしか出力できず困っています。

ウィンドウに出力するにはどういった処理が必要なのでしょうか。

また、DxLibなどで提供されている関数をcoutの様に記述することは可能でしょうか。
by 長峰
10年前
フォーラム: C言語何でも質問掲示板
トピック: キーコンフィグについて
返信数: 4
閲覧数: 2113

Re: キーコンフィグについて

softya(ソフト屋) さんが書きました:KEY_INPUT_RIGHTなどはint型の数値ですから、数値→数値変換なので、int配列で良いんじゃないでしょうか。
上限も256までなので、固定の配列で良いと思います。
KEY_INPUT_RIGHTは数値だったのですね、それなら出来そうな気がしてきました。

まだいくつか考慮すべきことはあると思いますが
作り方のイメージがつきましたので、解決とさせて頂きます。

softyaさん、わかりやすく教えてくださりありがとうございました。
by 長峰
10年前
フォーラム: C言語何でも質問掲示板
トピック: キーコンフィグについて
返信数: 4
閲覧数: 2113

Re: キーコンフィグについて

softyaさん回答ありがとうございます。
softya(ソフト屋) さんが書きました: キーの変換対応テーブルをクラス内で保持して
言葉がわからず、うまく説明出来ませんでしたが、まさにその様なことを考えていました!

追加質問になって申し訳ないですが、
変換対応テーブルというのは、どのような形で用意すればいいのでしょうか。
by 長峰
10年前
フォーラム: C言語何でも質問掲示板
トピック: キーコンフィグについて
返信数: 4
閲覧数: 2113

キーコンフィグについて

新・ゲームプログラミングの館 [ http://dixq.net/g/index.html ] 上記サイトを参考に、キーの入力フレームを取得するクラスを作成しました。 class Keyboard{ static const int num=256;//有効なキーの総数 unsigned int press[num],release[num];//フレーム数を格納する変数 bool checkValid(int keycode){return(0<=keycode && keycode<num);}//有効なキーかチェック public: Keyboard(); void update(); ...
by 長峰
11年前
フォーラム: C言語何でも質問掲示板
トピック: 学校の課題
返信数: 8
閲覧数: 4136

Re: 学校の課題

学校の課題であるなら、習っているものを活用してコードを作成すべきです。 重複するコードが多いので、それらをwhile文でまとめて、 質問文の表示は、while文の中でswitch,caseを使って分岐させるのが単純だと思います。 while文は質問の数だけ(5回分)ループできる様にして、 while文中のswitch文にcaseを総問題数分用意すれば実装できます。 ただしcaseを一括で管理するのは大変なので、 現在何問目かで一度分岐させてから質問のswitch文に繋ぐのが無難です。 分岐の管理は変数(初期値0)にyesなら1、noなら0を足していき 次の質問で足す前に2倍していけば、質問の方...
by 長峰
11年前
フォーラム: C言語何でも質問掲示板
トピック: 変数の共有
返信数: 4
閲覧数: 2414

Re: 変数の共有

softyaさん回答ありがとうございます。

>プログラムの何処からでも参照可能になるものと言う意味で捉えてください。

グローバル変数の例を見ていつも頭を捻っていたので助かりました。
やはりそのような意味合いで合っていたのですね。

アドバイスを参考に無事コード作成できたので解決とさせて頂きます。ありがとうございました。
by 長峰
11年前
フォーラム: C言語何でも質問掲示板
トピック: 変数の共有
返信数: 4
閲覧数: 2414

Re: 変数の共有

>externをクラスの何処に書こうとしたのでしょうか?
>寿命期間が違う場所に書けないので、それで怒られてのでは?

そのまま置いていました。
externは寿命が長かったのですね。

>グローバル変数として書くということなので、あまり歓迎されないのは確かです。

グローバル変数の意味合いが曖昧なのですが、ヘッダーをincludeしていくことで共有するのでしょうか?
by 長峰
11年前
フォーラム: C言語何でも質問掲示板
トピック: 変数の共有
返信数: 4
閲覧数: 2414

変数の共有

main.cppにある変数を、利用するクラス群の継承元のクラスにexternを使い宣言しようとしたのですが、クラスメンバーに対するストレージクラスが無効であると、構文エラーが出ました。
ストレージクラスについて調べてみましたが、理解が及ばず、構文との関係がわかりませんでした。

本題の質問ですが、main.cppにある変数を他のソースで共有するには、どうしたら良いのでしょうか。
by 長峰
11年前
フォーラム: C言語何でも質問掲示板
トピック: 文字を中央に揃えて表示させたいが出来ない。
返信数: 3
閲覧数: 2112

Re: 文字を中央に揃えて表示させたいが出来ない。

お二方とも回答ありがとうございます。

分かりやすい説明で無事に問題を解決できました。
事前計算のデメリットが目立つようなので、もう少し改良を加えようと思います。

質問できて良かったです。
by 長峰
11年前
フォーラム: C言語何でも質問掲示板
トピック: 文字を中央に揃えて表示させたいが出来ない。
返信数: 3
閲覧数: 2112

文字を中央に揃えて表示させたいが出来ない。

件名の通り、文字を中央に揃えて表示させたいのですが、なかなかうまく行きません。 現状のコードを実行すると、文字の書き始めが中央になってしまっています。(x=320の位置) 知恵を貸してください。 //String.h #pragma once #include"DxLib.h" int CalcCenter(int x1,int x2,const char *str){ return ( x2+x1-GetDrawStringWidth(str,strlen(str)) )/2; } //main.cpp //無駄な部分を削除したので色々おかしいかもしれませんが、文字は表示されています。 #i...

詳細検索ページへ移動する