Condividi tramite


Avviso del compilatore (livello 1) C4342

modifica del comportamento: 'function' chiamata, ma è stato chiamato un operatore membro nelle versioni precedenti

Nelle versioni di Visual C++ precedenti a Visual Studio 2002 è stato chiamato un membro, ma questo comportamento è stato modificato e il compilatore trova ora la corrispondenza migliore nell'ambito dello spazio dei nomi.

Se è stato trovato un operatore membro, il compilatore in precedenza non considererebbe alcun operatore di ambito dello spazio dei nomi. Se esiste una corrispondenza migliore nell'ambito dello spazio dei nomi, il compilatore corrente lo chiama correttamente, mentre i compilatori precedenti non lo considerano.

Questo avviso deve essere disabilitato dopo aver convertito correttamente il codice nella versione corrente. Il compilatore può fornire falsi positivi, generando questo avviso per il codice in cui non è presente alcuna modifica del comportamento.

Per impostazione predefinita, questo avviso non è attivo. Per altre informazioni, vedere Compiler Warnings That Are Off by Default.

L'esempio seguente genera l'errore 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;
}