編譯器警告 (層級 1) C4342
行為變更: 呼叫了 'function',但是先前版本中呼叫的是成員運算子
在 Visual Studio 2002 之前的 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;
}