Share via


編譯器警告 (層級 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;
}