| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 959 人关注过本帖
标题:请问此问题为什么无法编译?
只看楼主 加入收藏
biancku
Rank: 2
等 级:论坛游民
帖 子:41
专家分:19
注 册:2010-11-30
结帖率:64.71%
收藏
已结贴  问题点数:5 回复次数:10 
请问此问题为什么无法编译?
#include<fstream>
#include<iostream>
using namespace std;
int main()
{
    ifstream infile("f1.dat",ios::in|ios::noreplace);
    if(!infile)
    {
        cerr<<"open error.\n";
        exit (1);
    }
    cerr<<"计算机\n";
    return 0;
}
编译结果:
--------------------Configuration: w - Win32 Debug--------------------
Compiling...
1.cpp
E:\程序A\w\1.cpp(6) : error C2039: 'noreplace' : is not a member of 'basic_ios<char,struct std::char_traits<char> >'
E:\程序A\w\1.cpp(6) : error C2065: 'noreplace' : undeclared identifier
Error executing cl.exe.

1.obj - 2 error(s), 0 warning(s)
搜索更多相关主题的帖子: 计算机 open 
2011-02-23 13:41
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:1 
说得很清楚呀,没有ios::noreplace这个东西,不知道你从哪里搞来的

另外,除非你确定自己已经非常非常了解C++,否则永远不要使用exit函数
2011-02-23 16:29
homelove
Rank: 2
来 自:厦门
等 级:论坛游民
帖 子:19
专家分:84
注 册:2010-12-21
收藏
得分:1 
ios::noreplace是旧的c++ ostream lib,
新版的只支持一下几种:
ios::app, to seek to the end of a stream before each insertion.

ios::ate, to seek to the end of a stream when its controlling object is first created.

ios::binary, to read a file as a binary stream, rather than as a text stream.

ios::in, to permit extraction from a stream.

ios::out, to permit insertion to a stream.

ios::trunc, to delete contents of an existing file when its controlling object is created.

2011-02-23 17:03
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:1 
以下是引用rjsp在2011-2-23 16:29:26的发言:

说得很清楚呀,没有ios::noreplace这个东西,不知道你从哪里搞来的

另外,除非你确定自己已经非常非常了解C++,否则永远不要使用exit函数

为什么这么不推荐使用 exit ?
2011-02-23 19:52
format123
Rank: 2
等 级:论坛游民
帖 子:35
专家分:60
注 册:2010-11-26
收藏
得分:1 
用return多好啊
2011-02-23 21:36
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
以下是引用pangding在2011-2-23 19:52:19的发言:


为什么这么不推荐使用 exit ?
从程序逻辑上应该是调用return,而非“中止程序”。差别就在于,main只是入口函数,我们所写的代码只是整个exe代码的一部分。我们只有权中止自己(return),而不应该中止整个进程(exit)。
(就像一个人下班时,只有权关闭自己使用的机器,而不能把公司的供电总闸给关了^_^)

另外,对C++而言,所有对象的析构函数得不到调用,资源无法回收,日志等无法执行。
举个例子,比如我定义一个foo类,构造函数中注册内核过滤层,析构函数中卸载内核过滤。一旦有人在中途调用exit,那么只能重启计算机了。

exit会刷新和关系文件句柄,导致的情况(C中一样)是,可能部分资源根本没有回收,可能部分资源回收两次而出错
2011-02-24 08:53
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
哦。那错误处理不就没法做了吗?如果不是 main 函数,而是其它功能函数,如果检测到意外要终止程序的运行怎么办?

exit 是个会回收资源的调用,它会在做了其它适宜的收尾工作后再终止程序。另一个不做这些工作的是 abort。
这是我以前对这两个函数的了解,看来比较肤浅。不过 C++ 标准库里用的都是这两个函数,应该也不是问题很严重吧。如果是 windows 有自己的一套方法,那就另当别论了。
2011-02-24 16:01
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
如果检测到意外要终止程序的运行怎么办?
--- 通知上一层(推荐),或者使用异常(省事)

exit 是个会回收资源的调用
--- 这个“资源”只包括文件句柄等有限的几种,它不可能像神一样了解程序员的意图,因为很多资源是“逻辑上的”

不过 C++ 标准库里用的都是这两个函数
--- 哪里?当然,如果代码都是自己写的,且确定没有其它必须回收的资源,自然可以调用。但在绝大部分情况下,不能确定,且亦没必要。
收到的鲜花
  • 犬虫门心2011-02-24 17:44 送鲜花  2朵   附言:学习了
2011-02-24 16:52
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:1 
以下是引用rjsp在2011-2-24 16:52:12的发言:

如果检测到意外要终止程序的运行怎么办?
--- 通知上一层(推荐),或者使用异常(省事)

exit 是个会回收资源的调用
--- 这个“资源”只包括文件句柄等有限的几种,它不可能像神一样了解程序员的意图,因为很多资源是“逻辑上的”

不过 C++ 标准库里用的都是这两个函数
--- 哪里?当然,如果代码都是自己写的,且确定没有其它必须回收的资源,自然可以调用。但在绝大部分情况下,不能确定,且亦没必要。
学习了!
受教了!

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-24 17:43
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
哦,用异常。老用异常导致都没想过怎么代替 exit 的事了。
不过标准库里用的确实都是 exit 。除了这个标准里也没什么函数可用了。

嗯。学了些知识。
2011-02-24 23:24
快速回复:请问此问题为什么无法编译?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043817 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved