ページ 11

クラスについて

Posted: 2014年2月11日(火) 22:03
by 十理須賀利
初めまして。クラス化について少し分からない事がありましたのでここでご質問させて頂きます。

今、私はちょっとしたゲームのクラス分けを試みています。TitleやPlay等の複数のシーンをクラスで作り、SceneMngで管理させています。
そこで、CharやMapなどのクラスもヘッダごとに分けて作っているのですが、生成方法がいまいち分かりません。例えば・・・

※一部省略しています

コード:

Char.h//ヘッダファイルにて
class Char
{
private:
    int pos;
public:
    Initialize();
};
Play.h//ヘッダファイルにて
class Play
{
public:
    Char char;//インスタンス化
public:
    Initialize();
}
Play.cpp//cppファイルにて
Play::Initialize()
{
    char.pos = 0; //アクセス不可(posがprivateだから?でもpublicじゃ意味ないし・・・)
}
とまあ、エラーが出るわけです・・・。
どうにかしてcharをPlayの中で生成したいのですが、どうすればよいのでしょうか?

言葉足らずで申し訳ありませんが、よろしくお願いいたします?

Re: クラスについて

Posted: 2014年2月11日(火) 22:09
by みけCAT
C++において、charは予約語なので、変数名には使用できません。
別の言語を使用してください。

Re: クラスについて

Posted: 2014年2月11日(火) 22:20
by h2so5
コンストラクターを使いましょう

コード:

class Char
{
private:
    int pos;
public:
	Char(int p);
};

Char::Char(int p) : 
	pos(p)
{
}

class Play
{
public:
    Char character;//インスタンス化
public:
    Play();
};

Play::Play() : 
	character(0)
{   
}

Re: クラスについて

Posted: 2014年2月12日(水) 11:18
by usao
>コンストラクターを使いましょう

わざわざ publicな Initialize() という関数を用意しているのだから,
現存するインスタンスを「何らかの意味で初期状態に戻す」手段が欲しいという話なのではないでしょうか.

コード:

class Play
{
  public:  //(ココpublicでいいのか?という話はとりあえず置いといて)
    Char m_char;  //変数名をこう変えたとして…
  pubilc:
    Initialize();
};

Play::Initialize()
{
  m_char.Initialize();  //Char::Initialize()を使えばいいように思いますが,どうなんでしょう?
}
[追記]
…と思ったら,
>生成方法がいまいち分かりません
と書いてありますね.じゃあやっぱり 生成時の話→コンストラクタ でいいのかも.