質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

679閲覧

メインのゲームループでsetしたクラスを別のクラスで使う方法。

mash_arrow

総合スコア5

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/04/06 18:41

編集2020/04/07 04:59

コード

前提・実現したいこと

メインのゲームループでsetしたクラスを別のクラスで使う方法。
このプログラムの場合 enemy.cppのattack関数を使えるようにしたい

発生している問題・エラーメッセージ

変更後
targetsetの部分が上手くいっていないのでどうやって解決していけばいいか悩んでいる。

エラーメッセージ targetsetの行にて
一致するトークンが見つかりませんでした。

該当のソースコード

C++

player.h

class player
{

public:
void setplayer(float x, float y);

float player_x; float player_y;

};

player.cpp

include "player.h"

void player::setplayer(float x, float y) {

player_x = x; player_y = y;

}

enemy.h

include "enemy.h"
include "player.h"
class enemy
{
public:
void setenemy(float x, float y);

void targetset(player p); void attack();

private:

float enemy_x; float enemy_y; player eplayer;

enemy.cpp

include "enemy.h"
include <iostream>

using namespace std;

void enemy::setenemy(float x, float y){
enemy_x = x;
enemy_y = y;
}

void enemy::attack() {

if (eplayer.player_x < enemy_x) { cout << "左に向かって攻撃"; } if (eplayer.player_x > enemy_x) { cout << "右に向かって攻撃"; }

}

void enemy::targetset(player p) {
{
eplayer = p;
}

source.cpp

include <iostream>
include "player.h"
include "enemy.h"

int main() {

player p; enemy e; p.setplayer(100.0f,100.0f); e.setenemy(200.0f, 200.0f); e.targetset(p); return 0;

}

試したこと

補足情報(FW/ツールのバージョンなど)

visual studio 2019

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2020/04/06 18:51

> 学校で配布されたフレームワークを使用 ご質問が, そのフレームワークや cEnemy,cPlayer クラスを知っている前提で書かれているように見受けられますが, どちらかに仕様やコードが公開されているのでしょうか.
SHOMI

2020/04/07 01:11

再現可能なコードを貼ってください。 メンバ変数ではなく同名のローカル変数にセットしていたとか?
guest

回答1

0

ベストアンサー

メインのゲームループでsetしたクラスを別のクラスで使う方法。

今のやり方ではtargetset関数内でPlaeyrのコピーコンストラクターが呼ばれてしまっています。しかし、Playerの中にコピーコンストラクターが存在しません。
コピーコンストラクターを作成するか、コピーコンストラクターを使わずに値を受け渡したい場合は参照渡しという方法で受け渡すのが良いとされています。
また、プレイヤーが一人と確定している場合はPlaeyrをシングルトンなどで対応することも可能と言えば可能です。
その辺の詳しい話はしっかりとオブジェクト指向を学んだうえでの話ですので、今は考えなくて結構だと思います。勉強頑張って下さいね。

投稿2020/04/07 07:15

stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問