C++primer完全抄下来的还编译通不过,在线等待答案。
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main()
{ string fileName;// #1
cout << "Please enter name of file to open: ";
cin >> fileName;
if ( fileName.empty() )
{
//很好,但有一点要说明
cerr << "fileName is empty. bailing out. bye!\n";
return -1;
}
ifstream inFile( fileName.c_str() ); // #2
if ( !inFile ) {
cerr << "unable to open file. bailing out. bye!\n";
return -2;
}
string inBuf; // #3
vector< string > text; // #4
while ( inFile >> inBuf ){
for (int ix=0;ix<inBuf.size();++ix)// #5
//这里ch并不必需,
//但有利于说明
if(( char ch = inBuf[ix]) =='.'){// #6
ch ='_';
inBuf[ix] = ch;
}
text.push_back( inBuf );
}
if ( text.empty() )
return 0;
//一条声明语句,有2个定义
vector<string>::iterator iter = text.begin(),//#7
iend = text.end();
while ( iter != iend )
{
cout << *iter << '\n';
++iter;
}
return 0;
}
C++primer中文第三版第五章第一个例题,还出错,编译通不过,高手请指教!
问题点数:20、回复次数:14Top
1 楼shaoboailinglijun(邵波爱凌丽君)回复于 2006-03-04 09:08:57 得分 0
自己顶一下!Top
2 楼zhNKUjw(淡淡的云彩悠悠的游)回复于 2006-03-04 09:20:28 得分 10
if(( char ch = inBuf[ix]) =='.')
{// #6
ch ='_';
inBuf[ix] = ch;
}
ch定义在if语句中,它的生存期仅为if的条件判断语句(( char ch = inBuf[ix]) =='.'执行时。
将其定义到前面即可
char ch;
while ( inFile >> inBuf ){
for (int ix=0;ix<inBuf.size();++ix)// #5
//这里ch并不必需,
//但有利于说明
if(( ch = inBuf[ix]) =='.'){// #6
ch ='_';
inBuf[ix] = ch;
}
text.push_back( inBuf );
}
Top
3 楼shaoboailinglijun(邵波爱凌丽君)回复于 2006-03-04 09:46:04 得分 0
我也是这样想的,但是C++primer上面也有错?Top
4 楼yelling(Ray(←☆→射手))回复于 2006-03-04 09:59:20 得分 0
那个是编译器做不做这种处理的问题,你试一下G++的编译器Top
5 楼njSeeWhy(北海鲲鹏)回复于 2006-03-04 10:29:31 得分 5
ch的生存期应该直到大括号结束,也就是inBuf[ix]=ch之后。因为那样才是一个完整的if语句。楼主把错误信息贴出来看看。Top
6 楼shaoboailinglijun(邵波爱凌丽君)回复于 2006-03-04 10:33:20 得分 0
我用Visual C++6.0编译的,我自己想ch的生存期出了问题,但是C++primer也有错误吗,完整的C++primer例题。Top
7 楼fhb13(游途道标)回复于 2006-03-04 15:35:04 得分 0
程序不想看 只想看看错误信息
楼主不要排除有可能是编译器问题Top
8 楼ugg(逸学堂(exuetang.net))回复于 2006-03-04 19:50:59 得分 0
我也是这样想的,但是C++primer上面也有错?
~~~~~~~~~~··
如果楼主看的不是原版的书籍,就有可能出错。
lz还是贴出错误信息吧?Top
9 楼shaoboailinglijun(邵波爱凌丽君)回复于 2006-03-04 21:43:55 得分 0
--------------------Configuration: 5.2 - Win32 Debug--------------------
Compiling...
5.2.cpp
C:\Documents and Settings\Administrator\桌面\C++primer源代码\第5章 语句\5.2.cpp(31) : error C2146: syntax error : missing ')' before identifier 'ch'
C:\Documents and Settings\Administrator\桌面\C++primer源代码\第5章 语句\5.2.cpp(31) : error C2065: 'ch' : undeclared identifier
C:\Documents and Settings\Administrator\桌面\C++primer源代码\第5章 语句\5.2.cpp(31) : error C2106: '=' : left operand must be l-value
C:\Documents and Settings\Administrator\桌面\C++primer源代码\第5章 语句\5.2.cpp(31) : error C2143: syntax error : missing ';' before '=='
C:\Documents and Settings\Administrator\桌面\C++primer源代码\第5章 语句\5.2.cpp(31) : error C2059: syntax error : ')'
C:\Documents and Settings\Administrator\桌面\C++primer源代码\第5章 语句\5.2.cpp(31) : error C2143: syntax error : missing ';' before '{'
执行 cl.exe 时出错.
5.2.obj - 1 error(s), 0 warning(s)
Top
10 楼t_jl1979(骑士)回复于 2006-03-05 14:02:07 得分 5
ch 出了作用域了改为:
char ch = inBuf[ix];
if (ch == '.' ) { // #6
ch = '_';
inBuf[ix] = ch;
}Top
11 楼shaoboailinglijun(邵波爱凌丽君)回复于 2006-03-05 15:28:45 得分 0
问题是C++primer上也有错误吗?Top
12 楼noOnlyCode(不错,偶就是传说中高数上下册都考80多分的牛逼人物!)回复于 2006-03-05 19:04:47 得分 0
问题是C++primer上也有错误吗?
//迷信思想,-_-!Top
13 楼wqtl_357(Step By Step!)回复于 2006-03-05 19:22:42 得分 0
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string fileName;// #1
cout << "Please enter name of file to open: ";
cin >> fileName;
if ( fileName.empty() )
{
//很好,但有一点要说明
cerr << "fileName is empty. bailing out. bye!\n";
return -1;
}
ifstream inFile( fileName.c_str() ); // #2
if ( !inFile ) {
cerr << "unable to open file. bailing out. bye!\n";
return -2;
}
string inBuf; // #3
vector< string > text; // #4
while ( inFile >> inBuf )
{
for (int ix=0; ix<inBuf.size(); ++ix)// #5
{
char ch = inBuf[ix];
if( ch == '.') // #6
{
ch ='_';
inBuf[ix] = ch;
}
}
text.push_back( inBuf );
}
if ( text.empty() )
return 0;
//一条声明语句,有2个定义
vector<string>::iterator iter = text.begin(),//#7
iend = text.end();
while ( iter != iend )
{
cout << *iter << '\n';
++iter;
}
return 0;
}
把ch的定义改了下。== 的左边必须是个值(而实际上写的是个表达式)Top
14 楼Dugowe(我不是火星人,我家狗狗才是..)回复于 2006-03-05 19:46:52 得分 0
我说一句吧,你用的是那一个编译器,不同的编译器的不同版本运行结果是不同的.
c++ primer 应该是最新的标准,我看的是<c++ primer plus> 可是我曾经用过vc++6.0
很多的功能都实现不了,所以建议你用vs.net作练习Top




