C で「MyMessageBox に型の名前がありません」というエラーが発生するのはなぜですか?

DDD
リリース: 2024-11-08 08:58:01
オリジナル
893 人が閲覧しました

Why Am I Getting

エラー: 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート