문제

C ++에서 다음 코드를 컴파일하려고합니다.

string initialDecision () 
{
 char decisionReviewUpdate;

 cout << "Welcome. Type R to review, then press enter." << endl;
 cin >> decisionReviewUpdate;

 // Processing code
}

int main()
{
    string initialDecision;
    initialDecision=initialDecision();

    //ERROR OCCURS HERE

 // More processing code
 return 0;
}

"오류가 여기에서 발생합니다"라고 표시된 경우, 컴파일하는 동안 다음과 같은 오류가 발생합니다.

도움이 되었습니까?

해결책

문자열과 기능에 같은 이름을주지 마십시오. 오류가 사라집니다.

컴파일러는 동일한 이름의 로컬 변수를 선언 할 때 해당 이름의 함수가 있다는 것을 "잊어 버렸습니다".

다른 팁

로컬 변수는 글로벌 기능의 이름을 그림자로 표시합니다. 로컬 변수의 이름을 바꾸는 것이 가장 좋지만 전역 이름에 특별히 액세스 할 수있는 범위 연산자도 있습니다.

initialDecision = ::initialDecision();

이것을 C ++에서 "이름 숨기기"라고합니다. 이 특정 예에서는 네임 스페이스 범위의 함수와 동일한 이름을 가진 로컬 변수를 선언합니다. 해당 변수의 선언 시점 후에 함수는 숨겨진, 그리고 '초기화 "이름을 언급 할 때마다 컴파일러는 변수를 참조하고 있다고 올바르게 가정합니다. 함수 호출 연산자 '()를'string '유형의 변수에 적용 할 수 없으므로 컴파일러는 오류 메시지를 발행합니다.

많은 경우 숨겨진 이름을 참조하기 위해 스코프 해상도 연산자 '::'를 사용할 수 있습니다. 예를 들어 Unclebens 응답을 참조하십시오.

함수의 이름과 일치하지 않도록 변수 이름을 바꾸십시오.

문제는 변수와 함수 모두로 이름을 초기화 이름을 반복하고 있다는 것입니다. 이것은 컴파일러를 크게 혼동합니다. 변수를 다른 것으로 바꾸십시오. 그러면 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top