ホームページ  >  記事  >  バックエンド開発  >  C コードで「MyMessageBox に型の名前がありません」エラーがスローされるのはなぜですか?

C コードで「MyMessageBox に型の名前がありません」エラーがスローされるのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-11 15:27:02761ブラウズ

Why Does My C   Code Throw a

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;
};

ただし、この変更により、MyMessageBoxUser および 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。