Dela via


Kompilatorvarning (nivå 1) C4342

beteendeförändring: "funktion" anropas, men en medlemsoperator anropades i tidigare versioner

Anmärkningar

I versioner av Visual C++ före Visual Studio 2002 anropades en medlem, men det här beteendet har ändrats och kompilatorn hittar nu den bästa matchningen i namnområdesomfånget.

Om en medlemsoperator hittades skulle kompilatorn tidigare inte överväga några namnområdesomfångsoperatorer. Om det finns en bättre matchning på namnområdesnivån, anropar den aktuella kompilatorn korrekt den, medan tidigare kompilatorer inte skulle överväga den.

Den här varningen bör inaktiveras när du har porterat din kod till den aktuella versionen. Kompilatorn kan ge falska positiva identifieringar och generera den här varningen för kod där det inte sker någon beteendeförändring.

Den här varningen är inaktiverad som standard. Mer information finns i Kompilatorvarningar som är inaktiverade som standard.

Example

I följande exempel genereras 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;
}