次の方法で共有


コンパイラの警告 (レベル 1) C4342

動作変更: 'function' が呼び出されますが、前のバージョンではメンバー演算子が呼び出されていました

Visual Studio 2002 より前のバージョンの Visual C++ では、メンバーが呼び出されていましたが、この動作が変更され、コンパイラは最も一致するものを名前空間スコープから検索するようになりました。

メンバー演算子が見つかった場合、以前であれば、コンパイラは一切の名前空間スコープ演算子を考慮しませんでした。 より一致度が高いものが名前空間スコープにある場合、現在のコンパイラはそれを正しく呼び出しますが、以前のコンパイラではそれを考慮しませんでした。

コードを現在のバージョンに問題なく移植した後は、この警告を無効にする必要があります。 コンパイラが誤検知を起こし、動作の変更がないコードに対してこの警告が生成される場合があります。

既定では、この警告はオフに設定されています。 詳細については、「 Compiler Warnings That Are Off by Default」を参照してください。

次の例では 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;
}