コンパイラの警告 (レベル 1) C4342
更新 : 2007 年 11 月
エラー メッセージ
動作変更: '関数' が呼び出されましたが、メンバ演算子が前のバージョンで呼び出されました
以前のバージョンの 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;
}