Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье содержатся сведения об устранении ошибки C2653 или C2039, возникающей при ссылке на функцию из библиотеки STD C++.
Исходная версия продукта: Visual C++
Исходный номер базы знаний: 243444
Симптомы
Попытка ссылаться на функцию из заголовка <cstdlib> библиотеки STD C++ с помощью пространства std имен (например, ) приводит к тому, 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);
}
В первом случае отображается C2653, так как пространство std имен не определено. Во втором случае отображается C2039, так как пространство std имен определено (в заголовке <vector>), но функция exit не является частью этого пространства имен. Чтобы обойти проблему в любом случае, просто заключите #include <cstdlib> его в пространство stdимен следующим образом:
// Compile Options: /GX
namespace std
{
#include <cstdlib>
};
void main()
{
std::exit(0);
}