STD C++ ライブラリから関数を参照しようとすると、C2653 または C2039 エラーが発生する
この記事では、STD C++ ライブラリから関数を参照するときに発生する C2653 または C2039 エラーの解決に関する情報を提供します。
元の製品バージョン: Visual C++
元の KB 番号: 243444
現象
名前空間 std
(たとえば) を使用して STD C++ ライブラリ ヘッダー<cstdlib>
から関数を参照しようとすると、std::exit(0)
コンパイラは C2653 または C2039 (エラーが生成された時点で名前空間std
が定義されているかどうかに応じて) エラー メッセージを出力します。
原因
<cstdlib>
は名前空間 std
を定義しません。 これは、次の Visual C++ ドキュメントに反します。
標準ヘッダー <cstdlib>
を含め、名前空間内に標準ヘッダー <stdlib.h>
を効果的に std
含めます。
解決方法
問題を回避するには、 を #include <cstdlib>
名前空間 に配置します std
。
詳細
次のようにコンパイルしようとすると、コンパイラに次のエラーが表示されます。
エラー 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
はその名前空間の一部ではありません。 どちらの場合も問題を回避するには、次のように、 を #include <cstdlib>
名前空間 std
に囲むだけです。
// Compile Options: /GX
namespace std
{
#include <cstdlib>
};
void main()
{
std::exit(0);
}
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示