C++ std::basic_ifstream抛出std::bad_cast
我正在尝试使用下面的代码从文件中读取数据。(请注意,您需要在GCC上启用C++11功能才能进行编译。)C++ std::basic_ifstream抛出std::bad_cast,c++,file-io,c++11,io,ifstream,C++,File Io,C++11,Io,Ifstream,我正在尝试使用下面的代码从文件中读取数据。(请注意,您需要在GCC上启用C++11功能才能进行编译。) #包括 typedef无符号字符字节; int main() { std::string filename=“test.cpp”; std::basic_ifstream in(文件名,std::basic_ifstream::in | std::basic_ifstream::binary); in.异常(std::ios::failbit | std::ios::badbit); 字节bu
#包括
typedef无符号字符字节;
int main()
{
std::string filename=“test.cpp”;
std::basic_ifstream in(文件名,std::basic_ifstream::in | std::basic_ifstream::binary);
in.异常(std::ios::failbit | std::ios::badbit);
字节buf[5];
in.read(buf,5);
返回0;
}
但是,在读取数据时,我会遇到一个异常:
terminate called after throwing an instance of 'std::bad_cast'
what(): std::bad_cast
在抛出“std::bad_cast”实例后调用terminate
what():std::错误的演员阵容
调用in.read(buf,5)命令时会发生这种情况
我知道我可以通过不设置我设置的异常掩码来抑制此异常,但这并不能解决问题,它只会屏蔽它。如果没有异常掩码,代码将继续工作,但读取0个字符
有人知道为什么会抛出此异常吗?我该如何让它消失呢?如果你将
字节重新定义为char
,那么坏演员
异常将不再存在
发生
我假设basic\u ifstream
模板没有完全调试
无符号字符
专门化。根据标准§27.3,
char\u traits
只需由库实例化
对于ChartType
={char | char16 | t | char32 | t | wchar | t}
c++STL只包含两种字符特征:
struct char_traits < char >;
struct char_traits <wchar_t >;
struct char\u traits;
结构特征;
对于发布工作的代码,需要定义char\u traits
对我来说,它甚至没有编译:没有匹配的构造函数来初始化'std::basic_ifstream
@H2CO3。如简介中所述,您需要启用C++11。否则,basic\u ifstream
的构造函数不存在。替代修复方法:使用filename.c_str()
而不是filename
。这个问题已经在这里解决了:它完全实现了char\u traits和codecvt
struct char_traits < char >;
struct char_traits <wchar_t >;