C++의 'Cout이 모호합니다' 오류

C Ui Cout I Mohohabnida Olyu



이 기사에서는 C++ 프로그래밍 언어의 모호한 오류에 대해 다룹니다. 모호한 상황은 컴파일러가 다양한 작업에 사용할 메서드나 연산자를 결정할 수 없을 때 나타납니다. 때로는 동일한 네임스페이스로 동일한 매개변수 함수를 사용하고 두 경우 모두 cout이 정의됩니다. 프로그램을 실행할 때 컴파일러는 이 코드가 어떤 의미를 나타내는지 이해하지 못하기 때문에 cout 모호한 오류를 생성합니다. cout 모호성은 정의된 네임스페이스나 프로그램 내부의 여러 함수 선언 사이에 충돌이 존재할 때 발생합니다.

예시 1:

이것은 C++ 프로그래밍에서 주로 발생하는 cout 모호한 오류의 예입니다. 여기서는 여러 네임스페이스를 사용할 때 컴파일러가 cout에서 모호한 오류를 생성하는 방법을 살펴보겠습니다. 이 예제의 코드 조각은 다음에서 언급됩니다.







#include

네임스페이스 랩탑 {

무효의 표시하다 ( ) {

성병 :: 시합 << '이것은 노트북 네임스페이스입니다.' << 성병 :: ;

}

}

네임스페이스 이동하는 {

무효의 표시하다 ( ) {


성병 :: 시합 << '이것은 모바일 네임스페이스입니다' << 성병 :: ;

}

}

정수 기본 ( ) {

사용하여 네임스페이스 랩탑 ;
사용하여 네임스페이스 이동하는 ;

표시하다 ( ) ;

반품 0 ;


}

여기에서는 필요에 따라 정의된 두 개의 네임스페이스가 있는 프로그램을 선택했습니다. 우리는 화면에 문자열을 표시하고 싶습니다. 이 코드의 출력은 다음에 첨부되어 있습니다.





코드 실행 시 cout 모호한 상황에 대한 오류가 발생합니다. 컴파일러가 코드를 읽을 때 컴파일러가 사용자 측에서 명확한 입력을 얻지 못하기 때문에 오류가 생성됩니다. 우리는 코드에서 여러 네임스페이스 선언을 사용했습니다. 전체 코드에서 우리는 화면에 출력을 표시하기 위해서만 'display' 메소드를 사용했습니다. 컴파일러는 어떤 표시 방법이 어떤 네임스페이스와 관련되어 있는지 전혀 모릅니다. 코드를 모호하게 만들지 않고도 컴파일러가 단계를 쉽게 이해할 수 있도록 코드를 간단하고 명확하게 만들어야 합니다.





이 오류에 대한 해결 방법은 컴파일러가 더 잘 이해할 수 있도록 main 함수에서 관련 네임스페이스를 사용하여 메서드를 호출하는 것입니다. 기본 실행 부분에서 호출하려는 네임스페이스의 메서드를 명확하게 지정합니다.

#include

네임스페이스 랩탑 {

무효의 표시하다 ( ) {


성병 :: 시합 << '이것은 노트북 네임스페이스입니다.' << 성병 :: ;

}

}

네임스페이스 이동하는 {

무효의 표시하다 ( ) {

성병 :: 시합 << '이것은 모바일 네임스페이스입니다' << 성병 :: ;

}

}

정수 기본 ( ) {

사용하여 네임스페이스 랩탑 ;
사용하여 네임스페이스 이동하는 ;
랩탑 :: 표시하다 ( ) ;
반품 0 ;


}

여기에서는 이전 스크린샷에서 볼 수 있듯이 display() 메서드를 기본 함수의 “laptop” 네임스페이스와 연결할 수 있습니다. 이제 프로그램을 실행해 보세요. 출력은 콘솔 창에 표시됩니다.



예 2:

이 시나리오는 C++의 cout 모호한 오류와 관련이 있습니다. 컴파일러는 실행 흐름을 이해하지 못하면 오류를 표시합니다. 이 예제의 코드 조각은 다음에 첨부되어 있습니다.

#include

네임스페이스 C언어 {

무효의 인쇄 ( 정수 ) {

성병 :: 시합 << 'C 언어의 네임스페이스: ' << << 성병 :: ;

}

}

네임스페이스 자바 {

무효의 인쇄 ( 정수 제이 ) {

성병 :: 시합 << 'Java 언어의 네임스페이스: ' << 제이 << 성병 :: ;

}

}

사용하여 네임스페이스 C언어 ;

사용하여 네임스페이스 자바 ;

정수 기본 ( ) {

인쇄 ( 5 ) ;
반품 0 ;


}

이 코드에서는 필요한 모든 라이브러리 헤더를 정의합니다. 우리는 서로 다른 목적으로 두 개의 네임스페이스를 만듭니다. 'C언어' 네임스페이스에서는 사용자로부터 정수 값을 가져오는 '인쇄' 메서드를 정의합니다. “print” 함수에서는 사용자가 콘솔 화면에 전달한 값을 표시하려고 합니다. 코드에서 'cout' 스트림을 사용하여 필요한 출력을 표시합니다. 그런 다음 이름이 'Java'인 다른 네임스페이스를 정의합니다.

이 'Java' 네임스페이스에서는 사용자가 'cout'을 사용하여 전달하는 값을 표시하기 위해 'print' 메서드를 다시 사용합니다. C++의 콘솔 창에서 원하는 출력을 얻기 위해 기본 함수에서 사용할 두 네임스페이스를 모두 호출합니다. 'main' 함수에서는 전달된 값을 콘솔 화면에 표시하기 위해 'print()' 오버로드된 함수를 호출합니다.

메인 메뉴에서 '실행' 옵션을 클릭하고 '컴파일 및 실행' 옵션을 선택합니다. 이 코드 실행 시 모호성에 대한 오류가 발생합니다. 오류 스크린샷은 다음과 같이 첨부됩니다.

이 오류는 컴파일러가 호출된 오버로드된 print() 함수에 대해 혼동하고 있음을 나타냅니다. 이 오류는 19행 'print (5)'에 있습니다. 컴파일러는 이 오버로드된 함수가 속한 네임스페이스에 대해 혼동합니다. 초보자는 대부분 이러한 유형의 오류에 항상 갇혀 있습니다.

실제로는 복잡하지 않은 이 오류를 해결해 보겠습니다. 모호한 오류는 쉽게 해결됩니다. 컴파일러 가시성과 이해를 위해 'main' 함수의 오버로드된 함수에 따라 네임스페이스를 지정해야 합니다. 이 프로그램에서처럼 다음과 같이 기존 코드에 'java::print(5)'를 추가합니다.

#include

네임스페이스 C언어 {

무효의 인쇄 ( 정수 ) {

성병 :: 시합 << 'C 언어의 네임스페이스: ' << << 성병 :: ;

}

}

네임스페이스 자바 {

무효의 인쇄 ( 정수 제이 ) {

성병 :: 시합 << 'Java 언어의 네임스페이스: ' << 제이 << 성병 :: ;

}

}

사용하여 네임스페이스 C언어 ;

사용하여 네임스페이스 자바 ;

정수 기본 ( ) {

자바 :: 인쇄 ( 5 ) ;
반품 0 ;


}

이제 프로그램은 어떤 cout 모호한 오류 없이 완벽하게 실행되고 콘솔 화면에 출력이 표시됩니다. 이 프로그램의 출력은 다음에 첨부되어 있습니다.

예시 3:

모호한 문제로 인해 발생한 오류에 대한 마지막이자 마지막 예시입니다. 컴파일러가 올바른 결과를 얻을 수 없습니다. 이 예제의 코드 조각은 사용자의 이해를 돕기 위해 다음과 같이 첨부됩니다.

여기서는 필수 라이브러리를 정의합니다. 그런 다음 콘솔 창에 문자열을 표시하려는 클래스가 포함된 네임스페이스를 정의합니다. “c” 변수를 사용하여 “main” 함수에서 정의된 이 네임스페이스를 호출합니다. 그런 다음 네임스페이스 객체를 사용하여 print() 메서드를 호출합니다. 메서드 호출 후 콘솔 화면에 문자열을 다시 표시합니다. 출력은 둘 다 문자열이어야 하며 콘솔 화면에 표시됩니다. 이 코드를 실행하면 다음과 같은 오류가 발생합니다.

#include

사용하여 네임스페이스 성병 ;

네임스페이스 myNamespace {

수업 시합 {
공공의 :
무효의 인쇄 ( ) {


시합 << '커스텀 카우트' << 성병 :: ;

}

} ;

}

정수 기본 ( ) {

myNamespace :: 시합 ;
씨. 인쇄 ( ) ;


시합 << '안녕하세요, 월드!' << 성병 :: ;

반품 0 ;

}

컴파일러는 콘솔 화면에 데이터를 표시하는 cout 문을 선택하지 않았습니다. 컴파일러는 cout 문에 속하는 네임스페이스를 이해할 수 없어 오류를 생성합니다. 이 오류에 대한 해결책은 컴파일러의 가독성과 이해를 위해 cout 문이 있는 네임스페이스 개체를 추가하는 것입니다. cout 문에 'std::'를 추가하고 코드를 실행합니다. 콘솔 화면에 다음 출력이 표시됩니다.

결론

여기서는 콘솔 화면에 출력을 표시해도 구문 오류도 아니고 논리 오류도 아닌 오류가 발생한다고 할 수 있습니다. 대부분의 경우 사용자는 좋은 감각으로 코드를 작성하지만 컴파일러는 이를 이해할 수 없습니다. 컴파일러는 입력에 대해 모호합니다. 따라서 C++ 프로그래밍 언어의 오류를 방지하려면 적절한 네임스페이스와 구문을 사용하여 모든 코드 단계를 명확하게 하세요. 이 문제를 해결하는 단계에는 명시적 한정자를 사용하고, 네임스페이스 충돌을 방지하고, 의도한 함수나 개체가 이 문제 해결과 관련된 단계를 식별하는지 확인하는 것이 포함됩니다.