컴파일러 경고(수준 1) C4342
동작 변경: 'function'이 호출되었지만 이전 버전에서는 멤버 연산자가 호출되었습니다.
Visual Studio 2002 이전의 Visual C++ 버전에서는 멤버가 호출되었지만 이 동작이 변경되었으며 컴파일러가 이제 네임스페이스 범위에서 가장 일치하는 항목을 찾습니다.
멤버 연산자를 찾은 경우 컴파일러는 이전에 네임스페이스 범위 연산자를 고려하지 않았습니다. 네임스페이스 범위에서 더 나은 일치 항목이 있는 경우 현재 컴파일러는 이를 올바르게 호출하지만 이전 컴파일러는 이를 고려하지 않습니다.
코드를 현재 버전으로 성공적으로 이식한 후에는 이 경고를 사용하지 않도록 설정해야 합니다. 컴파일러는 가양성(false positive)을 제공하여 동작 변경이 없는 코드에 대해 이 경고를 생성할 수 있습니다.
기본적으로 이 경고는 해제되어 있습니다. 자세한 내용은 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;
}