>백엔드 개발 >C++ >내 C 코드에서 'MyMessageBox가 유형 이름을 지정하지 않습니다' 오류가 발생하는 이유는 무엇입니까?

내 C 코드에서 'MyMessageBox가 유형 이름을 지정하지 않습니다' 오류가 발생하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-11 15:27:02813검색

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

이 전달 선언은 이라는 클래스가 있음을 컴파일러에 알립니다. 전체 정의가 아직 제공되지 않더라도 MyMessageBoxUser에 대한 참조를 보유할 수 있도록 하는 User가 존재합니다.

위 내용은 내 C 코드에서 'MyMessageBox가 유형 이름을 지정하지 않습니다' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.