エラー: C の "MyMessageBox に型の名前がありません"
前方宣言を使用してクラスを含むコードをコンパイルするときは、次のことを確認することが重要です定義の順序が正しいことを確認します。
問題の定義
次のクラス宣言を考慮してください。
class User { public: MyMessageBox dataMsgBox; }; class MyMessageBox { public: void sendMessage(Message *msg, User *recvr); Message receiveMessage(); vector<Message> *dataMessageList; };
このコードを gcc でコンパイルすると、
MyMessageBox does not name a type
説明
コンパイラーは最初に User クラス宣言を検出しますが、メンバー型として参照される MyMessageBox を見つけます。ただし、この時点では、コンパイラはまだ MyMessageBox の定義を検出していません。これにより、「型に名前がありません」エラーが発生します。
解決策
この問題を解決するには、MyMessageBox を使用する前に MyMessageBox を定義する必要があります。ユーザーのメンバータイプ。これは、User を前方宣言し、その定義を MyMessageBox の下に移動することで実現されます。
class User; // Forward declaration of User class MyMessageBox { public: void sendMessage(Message *msg, User *recvr); Message receiveMessage(); vector<Message> *dataMessageList; }; class User { public: MyMessageBox dataMsgBox; };
この変更により、コンパイラーは User が後で定義されること、および MyMessageBox がそのメンバーとして使用される有効な型であることを認識できるようになります。
補足
指定されたコードでは、sendMessage メソッドは Message と User へのポインターを受け取ります。 null ポインターの逆参照を防ぎ、メッセージとユーザーが常に提供されるようにするために、代わりに参照を渡すことを検討してください。
void sendMessage(const Message& msg, User& recvr);
以上がC で「MyMessageBox に型の名前がありません」というエラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。