Udostępnij za pośrednictwem


Ostrzeżenie kompilatora (poziom 1) C4342

zmiana zachowania: "funkcja" wywoływana, ale operator elementu członkowskiego został wywołany w poprzednich wersjach

W wersjach programu Visual C++ przed programem Visual Studio 2002 element członkowski został wywołany, ale to zachowanie zostało zmienione, a kompilator znajduje teraz najlepsze dopasowanie w zakresie przestrzeni nazw.

Jeśli operator elementu członkowskiego został znaleziony, kompilator wcześniej nie rozważy żadnych operatorów zakresu przestrzeni nazw. Jeśli zakres przestrzeni nazw jest lepszy, bieżący kompilator poprawnie go wywołuje, podczas gdy poprzednie kompilatory nie będą go uwzględniać.

To ostrzeżenie powinno zostać wyłączone po pomyślnym przeniesieniu kodu do bieżącej wersji. Kompilator może dać fałszywie dodatnie wyniki, generując to ostrzeżenie dla kodu, w którym nie ma zmiany zachowania.

To ostrzeżenie jest domyślnie wyłączone. Aby uzyskać więcej informacji, zobacz Ostrzeżenia kompilatora, które są domyślnie wyłączone.

Poniższy przykład generuje 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;
}