> 백엔드 개발 > C++ > 'std::endl'이 '알 수 없는 유형' 오류를 발생시키는 이유는 무엇입니까?

'std::endl'이 '알 수 없는 유형' 오류를 발생시키는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-07 04:40:11
원래의
863명이 탐색했습니다.

Why Does

연산자에서 "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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿