Compilerwarnung (Ebene 1) C4342
Verhaltensänderung: "Funktion" wird aufgerufen, aber ein Memberoperator wurde in früheren Versionen aufgerufen.
In Versionen von Visual C++ vor Visual Studio 2002 wurde ein Element aufgerufen, dieses Verhalten wurde jedoch geändert, und der Compiler findet jetzt die beste Übereinstimmung im Namespacebereich.
Wenn ein Memberoperator gefunden wurde, würde der Compiler zuvor keine Namespacebereichsoperatoren in Betracht ziehen. Wenn es eine bessere Übereinstimmung im Namespacebereich gibt, ruft der aktuelle Compiler sie ordnungsgemäß auf, während frühere Compiler dies nicht in Betracht ziehen würden.
Diese Warnung sollte deaktiviert werden, nachdem Sie den Code erfolgreich zu der aktuellen Version portieren. Der Compiler kann falsch positive Ergebnisse liefern und diese Warnung für Code generieren, bei dem keine Verhaltensänderung vorliegt.
Diese Warnung ist standardmäßig deaktiviert. Weitere Informationen finden Sie unter Compiler Warnings That Are Off by Default.
Im folgenden Beispiel wird C4342 generiert:
// 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;
}