1. ホーム
  2. c++

[解決済み] 式はクラス型を持つ必要があります。- クラスオブジェクトのベクトル

2022-02-16 08:24:03

質問

どなたか、どこを見ればいいのか正しい方向を教えてください。上記のようなエラーが発生します。

std::vector of class States をゲームエンジンクラスで宣言しています。

class GameEngine
{....
 private:
 std::vector<State> *m_states;
}

コンストラクタ内。

m_states = new std::vector<State>;

ステート機能追加

void GameEngine::AddState(State *state, bool change)
{
   m_states.push_back (state);
   .....
}

"エラー 3 エラー C2228: '.push_back' の左側には class/struct/union" が必要です。

よろしくお願いします。

どのように解決するのですか?

m_statesをポインタとして宣言している ...

...
private:
 std::vector<State> *m_states;
...

ということで、ポインタとして使用する必要があります。

書く m_states->push_back の代わりに m_states.push_back .

一方、あなたのコードにはもう一つ誤りがあるようですね。

あなたの GameEngine::AddState(State *state, bool change) 関数は State * を第1引数として与えますが、あなたの m_states メンバはベクトルであり State オブジェクトのポインタではありません。宣言を変更する必要があります。

std::vector<States *> *m_states;

アドバイスをお願いします。 C++でポインタ(*)を使うのはなるべく避けましょう。 スマートポインタ の代わりに