读书人

C++ primer上的一个例子在VS 2005里

发布时间: 2012-02-15 12:09:44 作者: rapoo

C++ primer上的一个例子,在VS 2005里 也调不过去,大家给看下
// 6.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h "


int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}


#include <fstream>
#include <string>
#include <vector>
#include <iostream>
using namespace std;

#include <fstream>
#include <string>
#include <vector>
#include <iostream>
using namespace std;

int main()
{
string fileName;
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() );
if( !inFile) {
cerr < < "unable to open file.bailing out.bye!\n ";
return -2;
}

string inBuf;
char ch;
vector < string> text;
while( inFile > > inBuf)
{
for ( unsigned int ix =0; ix <inBuf.size();++ix)
//////////////////////////////////////////////////////////////
////这个地方开始声明的是int ix =0;结果编译器反复报错说是警告1warning C4018: “ <”: 有符号/无符号不匹配,难道一个string对象的.size()是无符号类型的)////////////////////////////////////

if( (ch = inBuf[ix] ) == '. '){
ch = '_ ';
inBuf[ix] =ch;
}
text.push_back(inBuf);
}
if(text.empty() )

vector <string> ::iterator iter =text.begin(), iend =text.end();

while( iter !=iend)
////////这个地方反复报错,说是iter和iend没有声明!)但这地方貌似不涉及作用域的穿透问题/////////////////////////////////////////////

{
cout < <*iter < < '\n ';
++iter;
}
return 0;
}

[解决办法]
.size()的返回类型是sizt_t是一个unsigned int,将unsigned类型和singed类型比较当然会有警告。

if(text.empty() )
vector <string> ::iterator iter =text.begin(), iend =text.end();


如果这里不是你的笔误的话,iter和iend的作用于是在if语句中,所以下面就说没有声明了。

我想是不是应该是这样:

if(text.empty() )
{
vector <string> ::iterator iter =text.begin(), iend =text.end();
while( iter !=iend)
{
cout < <*iter < < '\n ';
++iter;
}
}
[解决办法]
//楼主都是一些简单的语法错误, 掉一些{, }等等. 下面的没有语法错误了:)

#include <fstream>
#include <string>
#include <vector>
#include <iostream>
using namespace std;

int main()
{
string fileName;
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() );
if( !inFile) {


cerr < < "unable to open file.bailing out.bye!\n ";
return -2;
}

string inBuf;
char ch;
vector < string> text;
while( inFile > > inBuf)
{
for (unsigned int ix =0; ix <inBuf.size();++ix) {
if( (ch = inBuf[ix] ) == '. '){
ch = '_ ';
inBuf[ix] =ch;
}
text.push_back(inBuf);
}
}

if(!text.empty()) {
vector <string> ::iterator iter =text.begin(), iend =text.end();
while( iter !=iend) {
cout < <*iter < < '\n ';
++iter;
}
}
return 0;
}

读书人网 >C++

热点推荐