この記事では、STD C++ ライブラリから関数を参照するときに発生する C2653 または C2039 エラーの解決に関する情報を提供します。
元の製品バージョン: Visual C++
元の KB 番号: 243444
現象
名前空間std (std::exit(0) など) を使用して std C++ ライブラリ ヘッダー<cstdlib>から関数を参照しようとすると、コンパイラは (エラーが生成された時点で名前空間stdが定義されているかどうかに応じて) C2653 または C2039 を出力します。
原因
<cstdlib> では、名前空間 stdは定義されません。 これは、次の Visual C++ ドキュメントに反しています。
std名前空間内に標準ヘッダー <stdlib.h>を効果的に含めるには、標準ヘッダー <cstdlib>を含めます。
解決方法
この問題を回避するには、名前空間stdに#include <cstdlib>を配置します。
詳細
次のコードをコンパイルしようとすると、コンパイラに次のエラーが表示されます。
エラー C2653: 'std' : クラスまたは名前空間名ではありません
// Compile Options: /GX
#include <cstdlib>
void main()
{
std::exit(0);
}
ただし、次のコードをコンパイルしようとすると、コンパイラに次のエラーが表示されます。
エラー C2039: 'exit' : 'std' のメンバーではありません
// Compile Options: /GX
#include <vector>
#include <cstdlib>
void main()
{
std::exit(0);
}
最初のケースでは、名前空間 std が定義されていないため、C2653 が表示されます。 2 番目のケースでは、名前空間 std が (ヘッダー <vector>で) 定義されているため、C2039 が表示されますが、関数 exit はその名前空間の一部ではありません。 どちらの場合も問題を回避するには、次のように名前空間stdに#include <cstdlib>を囲むだけです。
// Compile Options: /GX
namespace std
{
#include <cstdlib>
};
void main()
{
std::exit(0);
}