現在、C++を用いてゲームを制作しようとしています。
ですがクラスを用いたオブジェクト生成で分からない点がありました。
[1.1] クラスを使いオブジェクトを生成した後、そのクラスのメンバ変数や関数を別のクラスから呼び出すことはできないのでしょうか?
[1.2] コードはこのように記述しました。必要ないと感じたところは外しています。
main.cpp
#include "main.h"
Player player = Player();
GameScreen game = GameScreen();
// while(裏画面を表画面に反映, メッセージ処理, 画面クリア, キー更新)
while (ScreenFlip() == 0 && ProcessMessage() == 0 &&ClearDrawScreen() == 0)
{
switch (modeselect)
{
case GAME_MAIN:
game.stage1();
break;
}
}
DxLib_End(); // DXライブラリ終了処理
return 0;
GameScreen.cpp
#include "main.h"
#pragma once
GameScreen::GameScreen(){}
GameScreen::~GameScreen(){}
void GameScreen::stage1()
{
player.move();
}
Player.h
#include "Object.h"
#pragma once
class Player : public Object
{
public:
Player();
~Player();
void move();//Objectクラスで純粋仮想関数として宣言
//このほかに変数xをObjectクラスで宣言しています
};
#include "main.h"
#pragma once
Player::Player()
{
y = 250;
}
Player::~Player()
{
}
void Player::move()
{
if (CheckHitKey(KEY_INPUT_UP))
{
if (CheckHitKey(KEY_INPUT_LSHIFT) || CheckHitKey(KEY_INPUT_RSHIFT))
{
y -= 2.0;
}
}
[1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
GameScreen.cppにおいて、「moveの左側はクラス、構造体、共用体でなければなりません」、「player: 定義されていない識別子です。」などのエラーが発生し実行できません。
[1.4] 今何がわからないのか、知りたいのか
どのようにすればGameScreen.cppからPlayerクラスの関数move(Player.move)を呼び出すことができるでしょうか?
PlayerクラスをGameScreenクラスに継承すればその場は解決する問題ではありますが、いずれObjectクラスを継承した雑魚敵やボスのクラスを作りたいためその方法を取った場合だと継承などの利点がなくなってしまうように感じています。
また、今回の件について私のコード事態が誤ったものであり、違う方法をとった方が良いのならどのような記述方法をとれば良いのかを明記してくださると非常に有り難いです。
[3] その他
・どの程度C言語を理解しているか
継承、仮想関数がひとまず終わったところです。ベクターやリストについては手を付けておらず、ポインタもほとんど……
・ライブラリを使っている場合は何を使っているか
DXライブラリを使用しています。