C での「MyMessageBox Does Not Name a Type」エラー
このエラー メッセージは、コンパイラが型を使用するクラス メンバーを検出したときに発生します。それはまだ定義されていません。例:
class User { public: MyMessageBox dataMsgBox; }; class MyMessageBox { public: void sendMessage(Message *msg, User *recvr); Message receiveMessage(); vector<Message *> dataMessageList; };
このコードでは、User クラスには、まだ定義されていないタイプ MyMessageBox のメンバーが含まれています。コンパイラが MyMessageBox dataMsgBox; 行に到達すると、その定義に関する情報がないため、MyMessageBox を認識できません。
このエラーを解決するには、参照しているクラスが実行前に定義されていることを確認する必要があります。会員として利用してください。これは、クラス宣言を並べ替えることによって実現されます:
class MyMessageBox { public: void sendMessage(Message *msg, User *recvr); Message receiveMessage(); vector<Message *> dataMessageList; }; class User { public: MyMessageBox dataMsgBox; };
ただし、この変更により、MyMessageBox が User および User を参照するため、循環依存関係が導入されます。 は MyMessageBox を指します。このサイクルを断ち切るには、MyMessageBox の定義で User を前方宣言します。
class MyMessageBox { public: void sendMessage(Message *msg, User *recvr); Message receiveMessage(); vector<Message *> dataMessageList; }; class User; // forward declaration of User User dataMsgBox; // now this line is valid
この前方宣言は、 という名前のクラスがあることをコンパイラーに通知します。 User が存在するため、MyMessageBox がへの参照を保持できるようになります。 ユーザー (完全な定義はまだ利用可能ではありません)。
以上がC コードで「MyMessageBox に型の名前がありません」エラーがスローされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。