• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:既定のコンストラクタがありません。というエラーについて)

C++学習中のエラーについて

このQ&Aのポイント
  • C++学習中に発生したエラーについての質問です。
  • コード内で「クラス、構造体、共用体に既定のコンストラクタがありません。」というエラーメッセージが表示されます。
  • また、new State_Runaway()としている部分の意味もわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ここでは継承は全く関係ありません. 例えば「new State_Sleep()」って「クラス State_Sleep のデフォルトコンストラクタ」を呼び出すよね. ちなみにコンストラクタを呼び出すためにはクラスを定義しておく必要があります.

hhhttt
質問者

お礼

おかげさまで質問で詰まっていた部分が解決いたしました。 本当にありがとうございました。

hhhttt
質問者

補足

返答が遅くなってしまいましたが、ありがとうございます!! ご指摘の通り、Executeの中身をクラスの外、定義が必要なクラスの下に移す事で解決しました。 また、new State()とnew State は表記が違うだけで同じ意味なのですね。 恥ずかしい質問でした。もっと基礎を勉強すべきでした。 少し疑問に思った事があるので追加で質問させて頂いても宜しいでしょうか。 この場合の様に、上から読んでいって、定義から先に書くようにする以外方法はないのでしょうか? 例えば上記コードの上の方で、 class Troll; class State{ public: virtual void Execute(Troll* troll) = 0; }; という部分があります。 私は一度、Trollクラスはこの下で定義してるから…、とコンパイルし、(当然)失敗して、class Troll; という一文を後から付け加えました。 今回の質問も、同じような事で詰まっていたようです。 ですが、主観ですが、class Troll; とわざわざ書くのは醜いコード、というか、C++のプロの方から見れば「そんな事書かなくても別の方法があるのに。」というような気がしてなりません。 このclass Troll;のように、どんな事があっても、使う前(上)で定義しておいて、コンパイラに教えてあげなくてはいけないのでしょうか?? 何か抜け道等は無いのでしょうか? ちょっと気になるので新しく質問させて頂きました。 回答の締め切り、ポイントの付与、をもう少しお待ちください。 もちろん回答頂けずとも適度に締め切って、あらためてポイント付与とお礼させて頂きます。

関連するQ&A