Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье содержатся сведения об устранении ошибки 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);
}