请问异常处理中怎样抛出一个ifstream对象
编程中遇到一个问题,如下一段程序中,filename已定义为string变量,
try
{
ifstream infile( filename.c_str() , ios::in| ios::binary );
if( !infile )
throw infile;
infile.read( (char *) ( &size ) , sizeof( size ) );
infile.read( (char *) ( list ) , sizeof( elemType ) * size );
infile.close();
}
catch( ifstream )
{
cerr<<"InformationDataFile.dat 文件打开失败 !"<<endl;
_getch();
exit( 0 );
}
编译时总是通不过,错误如下:
I:\Microsoft Visual Studio 8\VC\include\fstream(675) : error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
I:\Microsoft Visual Studio 8\VC\include\ios(151) : see declaration of 'std::basic_ios<_Elem,_Traits>::basic_ios'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
This diagnostic occurred in the compiler generated function 'std::basic_ifstream<_Elem,_Traits>::basic_ifstream(const std::basic_ifstream<_Elem,_Traits> &)'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
I:\Microsoft Visual Studio 8\VC\include\istream(842) : error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
I:\Microsoft Visual Studio 8\VC\include\ios(151) : see declaration of 'std::basic_ios<_Elem,_Traits>::basic_ios'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
This diagnostic occurred in the compiler generated function 'std::basic_istream<_Elem,_Traits>::basic_istream(const std::basic_istream<_Elem,_Traits> &)'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
后来发现是 throw infile; 这句的问题,把它去掉就好了,那请问各位高手异常处理中怎样抛出一个ifstream类的对象呢?还是个抛出它的一个什么成员呢?
try
{
ifstream infile( filename.c_str() , ios::in| ios::binary );
if( !infile )
throw infile;
infile.read( (char *) ( &size ) , sizeof( size ) );
infile.read( (char *) ( list ) , sizeof( elemType ) * size );
infile.close();
}
catch( ifstream )
{
cerr<<"InformationDataFile.dat 文件打开失败 !"<<endl;
_getch();
exit( 0 );
}
编译时总是通不过,错误如下:
I:\Microsoft Visual Studio 8\VC\include\fstream(675) : error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
I:\Microsoft Visual Studio 8\VC\include\ios(151) : see declaration of 'std::basic_ios<_Elem,_Traits>::basic_ios'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
This diagnostic occurred in the compiler generated function 'std::basic_ifstream<_Elem,_Traits>::basic_ifstream(const std::basic_ifstream<_Elem,_Traits> &)'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
I:\Microsoft Visual Studio 8\VC\include\istream(842) : error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
I:\Microsoft Visual Studio 8\VC\include\ios(151) : see declaration of 'std::basic_ios<_Elem,_Traits>::basic_ios'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
This diagnostic occurred in the compiler generated function 'std::basic_istream<_Elem,_Traits>::basic_istream(const std::basic_istream<_Elem,_Traits> &)'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
后来发现是 throw infile; 这句的问题,把它去掉就好了,那请问各位高手异常处理中怎样抛出一个ifstream类的对象呢?还是个抛出它的一个什么成员呢?
...全文
相关推荐
std::ifstream详解[代码]
std::ifstream是C++标准库中用于从文件读取数据的类,属于std::fstream的特化版本。本文详细介绍了其使用方法,包括头文件包含、定义与初始化(默认构造函数和直接构造函数)、文件打开与检查(is_open方法)、多种读取方式(逐行、逐字符、读取到字符串)、文件关闭及完整示例代码。同时强调了文件路径、权限、编码及异常处理等注意事项,为C++文件操作提供了全面指导。
C++异常处理实战:从被动捕获到主动抛出的设计策略与最佳实践
异常处理是编程语言中用于管理运行时错误的核心机制,其原理在于通过非局部跳转将错误信息从检测点传递到处理点,从而分离正常逻辑与错误处理代码。这一机制的技术价值在于提升代码的健壮性、清晰度和可维护性,是现代软件工程中构建可靠系统的重要基石。在C++等系统级语言的应用场景中,异常处理尤为关键,它不仅是处理标准库错误的工具,更是设计高质量API、实现资源安全管理和保障事务性操作的核心手段。本文聚焦于**主动抛出异常**这一高级主题,深入探讨了如何通过精准使用`throw`关键字、设计自定义异常类以及遵循异常安全保证
C++嵌套的异常处理
try catch finally 的多层嵌套。 catch的多重嵌套 简单例子
C++编程测试题,考察范围:面向对象特性与函数重载机制:基于类继承和多态的代码优化与异常处理技术解析
C++编程测试题,考察范围:面向对象特性与函数重载机制:基于类继承和多态的代码优化与异常处理技术解析
VC++实现打开一个文本文件并显示出来
对新手很有帮助的吧!大大家会喜欢的,5555,加分啊 !


