Compartir a través de


Advertencia del compilador (nivel 1) C4342

Actualización: noviembre 2007

Mensaje de error

cambio en el comportamiento: se llamó a 'función', pero en versiones anteriores se llamaba a un operador de miembro
behavior change: 'function' called, but a member operator was called in previous versions

En versiones anteriores de Visual C++, se llamaba a un miembro, pero este comportamiento se ha modificado y el compilador busca la mejor coincidencia en el ámbito de espacio de nombres.

Si se encontrara un operador de miembro, el compilador no consideraría previamente ningún operador del ámbito de espacio de nombres. Si hay una mejor coincidencia en el ámbito de espacio de nombres, el compilador actual lo llamará correctamente, mientras que los compiladores anteriores no lo considerarían.

Esta advertencia se debería deshabilitar después de haberse trasladado correctamente el código a la versión actual. El compilador puede proporcionar falsos positivos, generando esta advertencia para código en el que no hay ningún cambio de comportamiento.

De forma predeterminada, esta advertencia está desactivada. Para obtener más información, vea Compiler Warnings That Are Off by Default.

El ejemplo siguiente genera el error 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;
}