C의 "MyMessageBox가 유형의 이름을 지정하지 않습니다." 오류: 전방 선언으로 순환 종속성을 해결합니다
"MyMessageBox가 유형의 이름을 지정하지 않습니다. type" 오류는 컴파일러가 클래스 멤버로 사용되는 MyMessageBox 정의 전에 User 클래스를 발견했음을 의미합니다. 이 문제를 해결하려면 User 클래스에서 MyMessageBox를 사용하기 전에 정의되어 있는지 확인해야 합니다.
그러나 MyMessageBox에는 User가 클래스 멤버로 포함되어 있으므로 User가 순환 종속성을 생성하기 전에 MyMessageBox를 정의해야 합니다. 이러한 종속성을 깨기 위해 클래스를 정의하지 않고 선언하는 정방향 선언을 사용할 수 있습니다.
이 접근 방식에는 MyMessageBox에서 사용하기 전에 User를 다음과 같이 선언하는 작업이 포함됩니다.
class User; // Forward declaration of User
이 전방 선언을 통해 이제 MyMessageBox는 아래와 같이 User를 포인터 또는 참조로 참조할 수 있습니다.
class MyMessageBox { public: void sendMessage(Message *msg, User *recvr); Message receiveMessage(); vector<Message>& dataMessageList; };
정방향 선언을 사용하면 정의가 완전하지 않더라도 MyMessageBox가 User의 존재를 인식할 수 있습니다. .
MyMessageBox가 정의되면 의도한 대로 MyMessageBox를 클래스 멤버로 포함할 수 있는 User 클래스 정의를 진행할 수 있습니다.
class User { public: MyMessageBox dataMsgBox; };
앞으로 선언을 도입함으로써 클래스 정의를 분리하고 순환 종속성을 해결하여 "MyMessageBox가 유형에 이름을 지정하지 않습니다." 오류가 발생하지 않고 컴파일을 진행할 수 있습니다.
sendMessage에서 포인터를 사용하는 것은 null 값을 전달하므로 권장되지 않는다는 점에 주목할 가치가 있습니다. 메시지 또는 사용자의 경우 정의되지 않은 동작이 발생할 수 있습니다. 대신, sendMessage를 호출하기 전에 참조를 사용하여 두 인수가 모두 유효한지 확인하는 것이 좋습니다.
위 내용은 C에서 전방 선언을 사용하여 'MyMessageBox가 유형의 이름을 지정하지 않습니다' 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!