コードにいくつかのエラーがあり、問題を解決できないようです。コードを実行すると、3 種類のエラーが発生します。
- 不正なメンバーの初期化
- 「クラス」タイプの再定義
- 'return' : 変換できません
私がやろうとしているのは、メニュー駆動のフロントエンドを持つ宇宙シミュレーターを作成することです。以下のコードは、小惑星、彗星、空飛ぶ円盤、ロケット、宇宙ステーション、宇宙飛行士、衛星、ジャンク、月の可能性のリストから宇宙で見つかる可能性のあるアイテムを選択できるようにするためのものです。
このアイテムは、spaceItem ファクトリで作成する必要があります。
抽象クラス Item.h
class AItems // error C2011: 'AItems' : 'class' type redefinition
{
std::string name;
public:
AItems(std::string n)
:name(n)
{
}
//This method is for testing only
std::string GetName()
{
return name;
}
};
SpaceItem.h
#include <list>
#include <algorithm>
#include <stdexcept>
#include <memory>
#include <iostream>
using namespace std;
#include "Abstract Class Item.h"
//Lets declare all the concrete ITEMS
class Asteroid : public AItems // error C2504: 'AItems' : base class undefined
{
public: Asteroid() // error spaceitems.h(14): error C2614: 'Asteroid' : illegal member initialization: 'AItems' is not a base or member
:AItems("Asteroid"){}
};
class Comet : public AItems
{
public: Comet()
:AItems("Comet"){}
};
class FlyingSaucer : public AItems
{
public: FlyingSaucer()
:AItems("Flying Saucer"){}
};
class Rocket : public AItems
{
public: Rocket()
:AItems("Rocket"){}
};
class SpaceStation : public AItems
{
public : SpaceStation()
:AItems("Space Station"){}
};
class Astronaut : public AItems
{
public : Astronaut()
:AItems("Astronaut"){}
};
class Satellite : public AItems
{
public : Satellite()
:AItems("Satellite"){}
};
class Junk : public AItems
{
public : Junk()
:AItems("Junk"){}
};
class Moon : public AItems
{
public : Moon()
:AItems("Moon"){}};
SelectItem.h
#include <list>
#include <algorithm>
#include <stdexcept>
#include <memory>
#include <iostream>
using namespace std;
#include "Abstract Class Item.h"
#include "SpaceItems.h"
class SelectItem
{
public:
enum ITEM_TYPE
{
ASTEROID,
COMET,
FLYINGSAUCER,
ROCKET,
SPACESTATION,
ASTRONAUT,
SATELLITE,
JUNK,
MOON
};
static AItems* createItem(ITEM_TYPE itemType)
{
switch (itemType)
{
case ASTEROID:
return new Asteroid(); //error C2440: 'return' : cannot convert from 'Asteroid *' to 'AItems *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
case COMET:
return new Comet();
case FLYINGSAUCER:
return new FlyingSaucer();
case ROCKET:
return new Rocket();
case SPACESTATION:
return new SpaceStation();
case ASTRONAUT:
return new Astronaut();
case SATELLITE:
return new Satellite();
case JUNK:
return new Junk();
case MOON:
return new Moon();
}
throw "Invalid Item Type";
}
};
main.cpp
#include <list>
#include <algorithm>
#include <iostream>
using namespace std;
#include "Select Item.h"
void item_information (SelectItem::ITEM_TYPE itemtype)
{
AItems* createItem = SelectItem::createItem(itemtype);
std::cout << "Item Type" << std::endl;
std::cout << itemtype << std::endl;
delete createItem; // warning C4150: deletion of pointer to incomplete type 'AItems'; no destructor called
}
int main()
{
item_information (SelectItem::ASTEROID);
item_information (SelectItem::COMET);
item_information (SelectItem::FLYINGSAUCER);
item_information (SelectItem::ROCKET);
item_information (SelectItem::SPACESTATION);
item_information (SelectItem::ASTRONAUT);
item_information (SelectItem::SATELLITE);
item_information (SelectItem::JUNK);
item_information (SelectItem::MOON);
}
どこが間違っているのか教えてください。ありがとうございました
エラーのリストは次のとおりです。
spaceitems.h(13): エラー C2504: 'AItems': 基本クラスが定義されていません
spaceitems.h(14): エラー C2614: 'Asteroid': メンバーの初期化が無効です: 'AItems' はベースまたはメンバーではありません
spaceitems.h(19): エラー C2504: 'AItems': 基本クラスが定義されていません
spaceitems.h(20): エラー C2614: 'Comet': メンバーの初期化が無効です: 'AItems' はベースまたはメンバーではありません
spaceitems.h(25): エラー C2504: 'AItems': 基本クラスが定義されていません
spaceitems.h(26): エラー C2614: 'FlyingSaucer': メンバーの初期化が無効です: 'AItems' はベースまたはメンバーではありません
spaceitems.h(31): エラー C2504: 'AItems': 基本クラスが定義されていません
spaceitems.h(32): エラー C2614: 'Rocket': メンバーの初期化が無効です: 'AItems' はベースまたはメンバーではありません
spaceitems.h(37): エラー C2504: 'AItems': 基本クラスが定義されていません
spaceitems.h(38): エラー C2614: 'SpaceStation': メンバーの初期化が無効です: 'AItems' はベースまたはメンバーではありません
spaceitems.h(43): エラー C2504: 'AItems': 基本クラスが定義されていません
spaceitems.h(44): エラー C2614: 'Astronaut': メンバーの初期化が無効です: 'AItems' はベースまたはメンバーではありません
spaceitems.h(49): エラー C2504: 'AItems': 基本クラスが定義されていません
spaceitems.h(50): エラー C2614: 'Satellite': メンバーの初期化が無効です: 'AItems' はベースまたはメンバーではありません
spaceitems.h(55): エラー C2504: 'AItems': 基本クラスが定義されていません
spaceitems.h(56): エラー C2614: 'ジャンク': メンバーの初期化が無効です: 'AItems' はベースまたはメンバーではありません
spaceitems.h(61): エラー C2504: 'AItems': 基本クラスが定義されていません
spaceitems.h(62): エラー C2614: 'Moon': メンバーの初期化が無効です: 'AItems' はベースまたはメンバーではありません
select item.h(33): エラー C2440: 'return': 'Asteroid *' から 'AItems *' に変換できません 指されている型は無関係です。変換には reinterpret_cast、C スタイルのキャスト、または関数スタイルのキャストが必要です
select item.h(35): エラー C2440: 'return': 'Comet *' から 'AItems *' に変換できません 指されている型は無関係です。変換には reinterpret_cast、C スタイルのキャスト、または関数スタイルのキャストが必要です
select item.h(37): エラー C2440: 'return': 'FlyingSaucer *' から 'AItems *' に変換できません 指されている型は無関係です。変換には reinterpret_cast、C スタイルのキャスト、または関数スタイルのキャストが必要です
select item.h(39): エラー C2440: 'return': 'Rocket *' から 'AItems *' に変換できません 指されている型は無関係です。変換には reinterpret_cast、C スタイルのキャスト、または関数スタイルのキャストが必要です
select item.h(41): エラー C2440: 'return': 'SpaceStation *' から 'AItems *' に変換できません 指されている型は無関係です。変換には reinterpret_cast、C スタイルのキャスト、または関数スタイルのキャストが必要です
select item.h(43): エラー C2440: 'return': 'Astronaut *' から 'AItems *' に変換できません 指されている型は無関係です。変換には reinterpret_cast、C スタイルのキャスト、または関数スタイルのキャストが必要です
select item.h(45): エラー C2440: 'return': 'Satellite *' から 'AItems *' に変換できません 指されている型は無関係です。変換には reinterpret_cast、C スタイルのキャスト、または関数スタイルのキャストが必要です
select item.h(47): エラー C2440: 'return': 'Junk *' から 'AItems *' に変換できません 指されている型は無関係です。変換には reinterpret_cast、C スタイルのキャスト、または関数スタイルのキャストが必要です
select item.h(49): エラー C2440: 'return': 'Moon *' から 'AItems *' に変換できません 指されている型は無関係です。変換には reinterpret_cast、C スタイルのキャスト、または関数スタイルのキャストが必要です
main.cpp(13): 警告 C4150: 不完全な型 'AItems' へのポインタが削除されました。デストラクタが呼び出されていません
私は問題を解決しました。しかし、それは私がやりたいことをしていません。アイテムを選択してから表示する機能が必要でした。
代わりに、次のように表示されます
Item Type 0 Item Type 1 Item Type 2
8番まで続きます。
プログラムは私にアイテムを要求し、その特定のアイテムをリストする必要があります。誰か助けてください。