VS2022编译旧C++代码时std::runtime_error相关报错求助
编译旧C++示例代码遇到std::runtime_error相关错误
我用VS Pro 2022 17.7.5版本编译厂商提供的未维护示例代码,已经15年没碰C++和Visual Studio了,现在对编译问题一头雾水。尝试修复第17行的std::runtime_error相关问题,但看不懂官方文档,改代码也没用。
相关代码片段
/* ReadDynaRecordListWithWhere.cpp : 定义控制台应用程序的入口点。 本示例旨在展示如何定义动态查询,仅从TeamTrack数据库读取所需列的数据。示例演示了如何获取TeamTrack中"Everyone"组成员的用户信息。 */ #include "stdafx.h" #include <stdio.h> #include <new.h> #include "TSServer.h" #include "TSDynaRecordList.h" // 在程序启动前创建这些对象,因为内存分配失败时再创建就太晚了(没有内存来新建对象)。 static const char * memoryMessage = "内存分配失败。"; #ifdef WIN32 static const std::runtime_error bad_alloc( memoryMessage ); // *** 第17行 // 定义new分配内存失败时调用的函数。 int TSNewHandler( size_t size ) { printf( "抛出错误: %s\n", memoryMessage ); throw bad_alloc; // *** 第23行 return NULL; } #endif
编译报错信息
级别 代码 描述 行号 错误 C2039 'runtime_error': 不是'std'的成员 17 消息 参见'std'的声明 25 错误 C4430 缺少类型说明符 - 假定为int。注意: C++不支持默认int类型 17 错误 C2146 语法错误: 标识符'bad_alloc'前缺少';' 17 错误 C4430 缺少类型说明符 - 假定为int。注意: C++不支持默认int类型 17 错误 C2040 'memoryMessage': 'int'与'const char *'的间接级别不同 17 错误 C2065 'bad_alloc': 未声明的标识符 23
修复方案
- 核心问题:代码使用
std::runtime_error但未包含对应的标准头文件,VS2022严格遵循C++标准,必须显式引入头文件才能使用标准库中的异常类型。 - 具体修复步骤:
- 在代码的包含头文件区域添加
#include <stdexcept>,这个头文件是std::runtime_error的定义所在。 - (可选,更规范)标准库中已有
std::bad_alloc异常类型(定义在<new>头文件中),无需自行创建同名的std::runtime_error对象,直接抛出标准异常即可,修改后的代码如下:#include "stdafx.h" #include <stdio.h> #include <new.h> #include <stdexcept> // 新增的必要头文件 #include "TSServer.h" #include "TSDynaRecordList.h" static const char * memoryMessage = "内存分配失败。"; #ifdef WIN32 int TSNewHandler( size_t size ) { printf( "抛出错误: %s\n", memoryMessage ); throw std::bad_alloc(); // 直接抛出标准内存分配失败异常 return NULL; } #endif - 确认项目C语言标准:右键项目→属性→C/C→语言,选择与旧代码兼容的标准(如C++17或更低版本)。
- 在代码的包含头文件区域添加
内容的提问来源于stack exchange,提问作者mnemotronic
相关产品推荐
相关产品推荐

