Training
Module
Call methods from the .NET Class Library using C# - Training
Use functionality in the .NET Class Library by calling methods that return values, accept input parameters, and more.
This browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
This article provides the information about solving the C2653 or C2039 error that occurs when you reference a function from the STD C++ library.
Original product version: Visual C++
Original KB number: 243444
Attempting to reference a function from the STD C++ library header <cstdlib>
using the namespace std
(for example, std::exit(0)
) causes the compiler to emit a C2653 or a C2039 (depending upon whether or not namespace std
is defined at the point where the error is emitted) error message.
<cstdlib>
does not define the namespace std
. This is contrary to the Visual C++ documentation, which says:
Include the standard header <cstdlib>
to effectively include the standard header <stdlib.h>
within the std
namespace.
To work around the problem, place the #include <cstdlib>
in the namespace std
.
Attempting to compile the following will cause the compiler to display the following error:
error C2653: 'std' : is not a class or namespace name
// Compile Options: /GX
#include <cstdlib>
void main()
{
std::exit(0);
}
However, attempting to compile the following causes the compiler to display the following error:
error C2039: 'exit' : is not a member of 'std'
// Compile Options: /GX
#include <vector>
#include <cstdlib>
void main()
{
std::exit(0);
}
In the first case, the C2653 is displayed, because the namespace std
has not been defined. In the second case, the C2039 is displayed, because the namespace std
has been defined (in the header <vector>
), but the function exit
is not part of that namespace. To work around the problem in either case, simply enclose the #include <cstdlib>
in the namespace std
, as follows:
// Compile Options: /GX
namespace std
{
#include <cstdlib>
};
void main()
{
std::exit(0);
}
Training
Module
Call methods from the .NET Class Library using C# - Training
Use functionality in the .NET Class Library by calling methods that return values, accept input parameters, and more.