Bagikan melalui


Compiler Warning (level 1) C4342

perubahan perilaku: 'fungsi' dipanggil, tetapi operator anggota dipanggil dalam versi sebelumnya

Dalam versi Visual C++ sebelum Visual Studio 2002, anggota dipanggil, tetapi perilaku ini telah diubah dan pengkompilasi sekarang menemukan kecocokan terbaik dalam cakupan namespace.

Jika operator anggota ditemukan, pengkompilasi sebelumnya tidak akan mempertimbangkan operator cakupan namespace apa pun. Jika ada kecocokan yang lebih baik pada cakupan namespace layanan, pengkompilasi saat ini memanggilnya dengan benar, sedangkan pengkompilasi sebelumnya tidak akan mempertimbangkannya.

Peringatan ini harus dinonaktifkan setelah Anda berhasil memindahkan kode Anda ke versi saat ini. Pengkompilasi dapat memberikan positif palsu, menghasilkan peringatan ini untuk kode di mana tidak ada perubahan perilaku.

Peringatan ini nonaktif secara default. Untuk informasi selengkapnya, lihat Peringatan Pengkompilasi yang Nonaktif secara Default.

Sampel berikut menghasilkan 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;
}