연산자에서 "std::endl is of Unknown Type" 오류 해결<< 오버로드
연산자 오버로드는 C의 강력한 기술로, 사용자 정의 데이터 유형이 "<<"와 같은 연산자에 대한 고유한 동작을 정의할 수 있게 해줍니다. 그러나 "<<" 연산자를 오버로드하면 "std::endl"을 사용할 때 문제가 발생할 수 있습니다.
"my_stream << endl"을 사용할 때 컴파일 오류가 발생하는 근본 원인은 " std::endl"은 데이터 유형이 아닌 함수로 정의됩니다. 이 문제를 해결하려면 "std::cout"이 "std::endl"을 어떻게 처리하는지 이해해야 합니다.
"std::cout"에서 연산자 "<<" "std::endl"과 같은 서명이 일치하는 함수 포인터를 허용하도록 구현되었습니다. 이를 통해 "std::cout"이 함수를 호출하고 반환 값을 전달할 수 있습니다. 이 개념을 사용하여 사용자 정의 스트림 "MyStream"에 대해 유사한 접근 방식을 구현할 수 있습니다.
"MyStream"에 대한 사용자 정의 endl 구현
"라는 새 멤버 함수를 소개합니다. endl"을 "<<" 연산자와 동일한 서명을 사용하여 "MyStream"으로 변환합니다. "MyStream::endl" 내에서 개행 인쇄와 같은 스트림에 특정한 사용자 정의 작업을 수행할 수 있습니다.
표준 EndLine 서명 일치
"std를 지원하려면 ::endl", 또 다른 "연산자<<"를 정의해야 합니다. "std::cout::endl"의 서명과 일치하는 함수 포인터를 허용합니다. 이를 통해 반환 값을 원활하게 전달하면서 "MyStream"에서 직접 "std::endl"을 호출할 수 있습니다.
예제 코드:
#include; struct MyStream { // ... (same as previous code) // MyStream's custom endl static MyStream& endl(MyStream& stream) { // ... (same as previous code) } // Operator<< to accept std::endl MyStream& operator<<(StandardEndLine manip) { // ... (same as previous code) } }; int main(void) { MyStream stream; // ... (same as previous code) stream << MyStream::endl; // Call custom endl stream << std::endl; // Call std::endl directly return 0; } 이를 구현하여 메서드를 사용하면 이제 컴파일 오류 없이 "my_stream << endl"을 사용할 수 있습니다. "<<" 연산자를 사용자 정의할 때는 "std::endl"의 기본 구현을 이해하는 것이 중요합니다. 나만의 스트림 수업을 위해
위 내용은 'std::endl'이 '알 수 없는 유형' 오류를 발생시키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!