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

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

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

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

Q&A

2回答

9506閲覧

あるクラスの中で、別のクラスを使う方法がよく分かりません

KeiM

総合スコア8

C++

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

0グッド

2クリップ

投稿2018/04/20 06:15

テキストベースのRPGを作っています。Itemクラスで、アイテムを定義してから、Backpackクラスの中に、Itemクラスで定義されたアイテムを出したり入れたりという処理をしたいです。Backpackクラス内でどのように、Itemを組み入れたら良いのか、いろいろ試してみましたが、エラーが出るばかりで、お手上げ状態です。どなたかご教授頂けないでしょうか?

C++

1//Itemクラス定義部分 2class Item { 3public: 4char name[MAX_NAME + 1]; 5float buyprice; 6float sellprice; 7float attack; 8float defence; 9}; 10 11//itemメンバ宣言部分 12Item item [] = { 13 {"薬草", 40, 20, 20, 17}, 14 {"何かの種", 28, 14, 21, 39}, 15 {"銅の剣", 10, 5, 32, 34}, 16 {"黄金の盾", 18, 9, 20, 82}, 17 {"兜", 19, 9.5, 20, 19} 18}; 19 20//この中にどうやってitem関数を使うことを宣言したら良いのか分かりません 21class Backpack { 22 23}; 24 25//この中にどうやってitemメンバを使うことを宣言したら良いのか分かりません 26Backpack backpack [] = { 27 Item item 28 29//backpack.itemという部分がこれで良いのか分かりません 30void ShowBackpack(const Backpack& backpack) { 31 cout << "name:" << **backpack.item** << " " << endl; 32} 33 34};

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

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

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

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

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

guest

回答2

0

すみません、動作は確認していないので、大まかなイメージで書きますと・・

BackpackはItemを入れる物なので
Itemの入れ物を作ってあげます

C++

1class Backpack { 2 ・・・・・ 3 std::vector<Item> m_Items; 4 5 void AddItem( Item& item ) 6 { 7 m_Items.push_back( item ); // 注:重複とか見てません 8 } 9};

Backpackは複数あってもいいですが、とりあえずどこかで1つインスタンス化します

C++

1Backpack my_backpack;

アイテムをインスタンス化してバックに入れます

C++

1Item newitem; 2//newitem.nameなどセット 3 4my_backpack.AddItem( newitem );

Backpackの中身一覧を見たい場合は、例えばこんなふうなメソッドを用意して

C++

1void Backpack::ShowItems() 2{ 3 std::vector<Item>::iterator it = m_Items.begin(); 4 for ( ; it != m_Items.end(); ++it ) { 5 cout << "name:" << it->name << endl; 6 } 7}

それをどこかから呼びます

C++

1my_backpack.ShowItems();

こういう感じはどうでしょうか。

投稿2018/04/20 07:49

ooa

総合スコア213

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

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

0

インデントを入れたほうが読みやすいですよ。

エラーが出ました(泣

じゃなくて、どういうエラーかは理解しましょう。
エラーメッセージにはヒントが隠されています。

しかもItem関数ってなんですか? 私が馬鹿なだけでしょうか?
用語はきちんと言いましょう。

Itemクラスならわかりますが、Item関数はないです。

これで全部なのでしょうか?

インデントがほとんどないので読みにくいし、グローバルオブジェクトとして Item item[] 等を確保しているのか何なのかもよくわからない。

まずは情報を整理して提示してください。

投稿2018/04/20 07:46

BeatStar

総合スコア4958

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問