Partilhar via


Aviso do compilador (nível 1) C4342

alteração de comportamento: 'function' é chamado, mas um operador de membro foi chamado em versões anteriores

Nas versões do Visual C++ anteriores ao Visual Studio 2002, um membro era chamado, mas esse comportamento foi alterado e o compilador agora encontra a melhor correspondência no escopo do namespace.

Anteriormente, se um operador membro fosse encontrado, o compilador não consideraria nenhum operador de escopo de namespace. Se houver uma correspondência melhor no escopo do namespace, o compilador atual o chamará corretamente, enquanto os compiladores anteriores não o considerarão.

Espera-se que esse aviso seja desabilitado depois que você portar com êxito seu código para a versão atual. O compilador pode fornecer falsos positivos, gerando esse aviso para o código quando não há nenhuma alteração de comportamento.

Esse aviso está desativado por padrão. Para obter mais informações, confira Avisos do compilador desativados por padrão.

A amostra a seguir gera 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;
}