前提・実現したいこと
ここに質問の内容を詳しく書いてください。
C++を使って簡単なゲームを作っています。シーンマネージャークラスを作ってタイトル画面やプレイ画面等の描写をこのクラスに任せるつもりだったのですが、途中からシングルトンにしようと手を加えたらエラーが出てしまい困っています。どうにかしてエラーが出ないように直したいです。
発生している問題・エラーメッセージ
Player* player;に対して c2143 ';'が'*'の前にありません。 c4430 型指定子がありません。 intと仮定します std::list<Cat*>cats;等のlistに対して c2065 Cat,Rabbit,Cancer定義されてない識別子です c2059 構文エラー:'>' list<>::iterator it c2039 'iterator':'grobal namespace'のメンバーではありません c3645 'C_it','R_it'...: 不明なオーバーライド指定子です C2327 'SceneManager::iterator': 型名、スタティック、または列挙子ではありません。 C2086 'unknown-type SceneManager::iterator': 再定義されました。 //SceneManagerクラスを書き直したら消えました C2011 'SceneManager': 'class' 型の再定義 C2027 認識できない型 'SceneManager' が使われています。
該当のソースコード
C++
1class SceneManager 2{ 3private: 4 //描画用ハンドル 5 int title_bcg; 6 int select_bcg; 7 int cursour; 8 int shotgun; 9 int sniper; 10 int pubg; 11 int lock; 12 int stage_1; 13 int stage_2; 14 int stage_3; 15 16 int clear = 2; 17 int stage = 1; 18 19 20public: 21 22 SceneManager() 23 { 24 sequence.change(&SceneManager::play); 25 } 26 27 void title(float t); 28 void select(float t); 29 void play(float t); 30 void stage_select(); 31 void spawn(int limit); 32 33//ここから下がエラーになってしまう 34 Player* player; 35 std::list<Cat*>cats; 36 std::list<Cat*>::iterator C_it; 37 38 std::list<Rabbit*>rabbits; 39 std::list<Rabbit*>::iterator R_it; 40 41 std::list<Cancer*>cancers; 42 std::list<Cancer*>::iterator K_it; 43 44 CSequence<SceneManager>sequence; 45}; 46 47//CancerクラスやRabbitクラスも基本的にはPlayerクラスと一緒 48class Player 49{ 50private: 51 //描画用ハンドル 52 int normal; 53 int move; 54 int snipe; 55 int shot; 56 int jump; 57 int death; 58 int cut; 59 60 int x; 61 int y; 62 int radius = 34; 63 64 65 66 int state = 0; 67 int cooltime = 30; 68 int count = 0; 69 bool wait = false; 70 bool cutin = false; 71 bool cool = true; 72 73public: 74 Player() 75 { 76 sequence.change(&Player::draw_player); 77 x = 100; 78 y = 400; 79 } 80 int* get_X() { return &x; } 81 int* get_Y() { return &y; } 82 83 84 void update(); 85 void draw_player(float t); 86 void Cutin(); 87 88//Playerクラスだとエラーが発生しない 89 Rifle* rifle; 90 91 92 CSequence<Player>sequence; 93}; 94 95//これを継承させようとしてたらエラーが発生し始めた 96template<class T> 97class Singleton 98{ 99public: 100 static inline T& GetInstance() 101 { 102 static T instance; 103 return instance; 104 } 105 106protected: 107 Singleton() {} // 外部でのインスタンス作成は禁止 108 virtual ~Singleton() {} 109 110private: 111 void operator=(const Singleton& obj) {} // 代入演算子禁止 112 Singleton(const Singleton& obj) {} // コピーコンストラクタ禁止 113};
試したこと
シングルトンを継承させようとするまでは問題なく動いたので、シングルトンの基底クラスの継承を止めて一度コードを書き直したりはしました
補足情報(FW/ツールのバージョンなど)
使用しているツールはVisualStudio2019になります。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/28 16:00