컴파일러 경고(수준 1) C4342
업데이트: 2007년 11월
오류 메시지
동작 변경: 'function'이(가) 호출되었지만 이전 버전에서는 멤버 연산자가 호출되었습니다.
behavior change: 'function' called, but a member operator was called in previous versions
이전 버전의 Visual C++에서는 멤버를 호출했지만 이 동작이 변경되었습니다. 이제 컴파일러는 네임스페이스 범위에서 가장 적합한 일치 항목을 찾습니다.
멤버 연산자를 찾은 경우 이전에는 컴파일러가 어떠한 네임스페이스 범위 연산자도 고려하지 않았습니다. 네임스페이스 범위에 더 적절한 일치 항목이 있는 경우 새 버전의 컴파일러는 이를 올바르게 호출하는 반면 이전 버전의 컴파일러는 이를 고려하지 않습니다.
이 경고는 코드를 현재 버전으로 올바르게 이식하면 해제됩니다. 컴파일러의 잘못된 확인으로 인해 동작이 변경되지 않은 코드에 대해 이 경고가 표시될 수도 있습니다.
이 경고는 기본적으로 해제되어 있습니다. 자세한 내용은 Compiler Warnings That Are Off by Default를 참조하십시오.
다음 샘플에서는 C4342 경고가 발생하는 경우를 보여 줍니다.
// C4342.cpp
// compile with: /EHsc /W1
#include <fstream>
#pragma warning(default: 4342)
using namespace std;
struct X : public ofstream {
X();
};
X::X() {
open( "ofs_bug_ev.txt." );
if ( is_open() ) {
*this << "Text" << "<-should be text" << endl; // C4342
*this << ' ' << "<-should be space symbol" << endl; // C4342
}
}
int main() {
X b;
b << "Text" << "<-should be text" << endl;
b << ' ' << "<-should be space symbol" << endl;
}