ゲームをC++で作成してみたい

白い時空
記事: 18
登録日時: 14年前
住所: 埼玉県さいたま市

ゲームをC++で作成してみたい

投稿記事 by 白い時空 » 14年前

かなり久しぶりの更新。

勉強ばかりでプログラミングはあまりやってなかったからな~。

とりあえず、C++をひと通り勉強できたので、クラス化しながらゲームを作成中。
でも手間がかかるかかる。まだクラス化だけで、ゲーム自体作ってないし。

まず困ったのは、分割コンパイルの方法。

例えば、.hファイルにこう書くとエラーになっちゃいます。

CODE:

class DxClass{
public:
	int func();
};

int DxClass::func(){
	/* 関数 */
}
関数の複数定義でエラーが出てしまいました。

クラス内に書くしか無いのか?と思っていたら実はinlineを付ければいいということが判明。

CODE:

class DxClass{
public:
	int func();
};

inline int DxClass::func(){
	/* 関数 */
}
これを知らなくて、かなり悩んでました。
これですっきり書けるようになるはず。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前

Re: ゲームをC++で作成してみたい

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

inlineの意味を分かって使っているのならOKですが、ただ単なるエラー回避ならやめたほうが良いと思いますよ。

CODE:

class DxClass{
public:
    int func() {
     /* 関数 */
    };
};
あとヘッダなら、こう言う書き方もあります。
どちらにしてもcppファイルに書くべき中身をヘッダに晒すのは意図がない限り止めるべきだと思いますが。

ISLe
記事: 2650
登録日時: 14年前

Re: ゲームをC++で作成してみたい

投稿記事 by ISLe » 14年前

分割コンパイルって、コンパイルに時間がかかって困るからやるものだと思うのです。
なので困ってないのならやらなくても良い気がします。

グローバル変数やインライン関数使いまくるとちょっとの変更でフルコンパイルしなければならなくなります。
フルコンパイルすると30分とか掛かるプロジェクトだとデバッグがちっとも進まなくなります。
仕事でそんなコード書くと叱られます。
デスマーチです。

白い時空
記事: 18
登録日時: 14年前
住所: 埼玉県さいたま市

Re: ゲームをC++で作成してみたい

投稿記事 by 白い時空 » 14年前

>>softyaさん
inlineの意味は知っています。関数をインライン化(マクロ化と似た事をする)して、動作を早めるんですよね。
記述の少ない関数には効果があり、記述の多い関数には使うべきではないとか。

この書き方を使うのは、記述の少ないクラスだけにしています。
記述の少ないクラスをわざわざcppとhに分割するのは面倒だったので。
記述が多いクラスはちゃんと分割していますよ。

>>ISLeさん
私は分割はするべきだと思っています。その方が後で、見た時分かりやすくなるので。
1回、分割なしでゲームを作ったことがありますが、記述が増えるにつれ分かりづらくなってしまいました。
関数で分割してもその関数を探すのが、面倒になっちゃいます。

ISLe
記事: 2650
登録日時: 14年前

Re: ゲームをC++で作成してみたい

投稿記事 by ISLe » 14年前

回りくどく書いてしまいましたが、統合開発環境(IDE)やmakeユーティリティを使って開発するとき、
・cppファイルの変更は、そのファイルだけをコンパイルし直してフルリンク
・hファイルの変更は、そのファイルをインクルードしているファイルをすべてコンパイルし直してフルリンク
になるというのを頭の片隅にでも置いといてもらえれば幸いです。