读书人

如何调试程序

发布时间: 2013-02-19 11:11:40 作者: rapoo

怎么调试程序
本帖最后由 liu1pan2min3 于 2013-02-02 23:21:42 编辑 挺不解的错误
#include<iostream>
#include<fstream>
#include<vector>
#include<string>
#include<map>
using namespace std;
typedef vector<string>vstring;
void populate_map(ifstream &infile,map<string,vstring>&map_name)
{
string textline;
while(getline(infile,textline))
{
string fam_name;
vector<string>child;
string::size_type pos=0,pre_pos=0,text_size=textline.size();
//找出一空格符分割开来的所有单词
while((pos=textline.find_last_of(' ',pos))!=string::npos)
{
string::size_type end_pos=pos-pre_pos;
if(!pre_pos)
fam_name=textline.substr(pre_pos,end_pos);
else
child.push_back(textline.substr(pre_pos,end_pos));
pre_pos=++pos;
}
//处理之后一个孩子的姓名
if(pre_pos<text_size)
child.push_back(textline.substr(pre_pos,pos-pre_pos));
if(!map_name.count(fam_name))
map_name[fam_name]=child;
else
{
cerr<<"we have have a "<<fam_name<<"family in our family"<<endl;
}
}
}

void dispaly_map( const map<string,vstring>&family,ostream &os)
{
map<string,vstring>::const_iterator iter=family.begin();
while(iter!=family.end())
{
os<<iter->first<<" ";
if(iter->second.empty())
os<<"has no children:"<<endl;
else
{
vector<string>::const_iterator it->second.begin();
while(it!=iter->second.end())
{
os<<*it<<" ";
it++;
}
os<<endl;
}
iter++;
}
}

void quer_map(const string &family,const map<string,vstring>&families)
{
map<string,vstring>::const_iterator it=families.find(family);
if(it!=families.end())
{
cout<<"sorry,the"<<family<<" is not exist"<<endl;
return;
}
cout<<"the"<< family;
if(!it->second.size())
cout<<"has no childen"<<endl;
else
{
//打印出vector中的所有小孩
vector<string>::const_iterator iter=it->second.begin();
while(iter!=it->second.end())
{
cout<<*iter<<" ";
iter++;
}

cout<<endl;

}
}

int main()
{

map<string,vstring>families;
string filename;
string str;
ifstream infile;
cout<<"输出文件名"<<endl;
cin>>filename;
infile.(filename);
if(!infile)
{
cerr<<"can't open for reading"<<endl;
return -1;
}

populate_map(infile,families);
string familyname;
while(cin>>familyname)
query_map(familyname,families);
display_map(families,cout);
return 0;
}



\编程练习\mao容器家族(文件式.cpp(48) : error C2143: syntax error : missing ';' before '->'
e:\编程练习\mao容器家族(文件式.cpp(48) : error C2143: syntax error : missing ';' before '->'
e:\编程练习\mao容器家族(文件式.cpp(95) : error C2059: syntax error : '('
e:\编程练习\mao容器家族(文件式.cpp(96) : error C2039: 'infile' : is not a member of 'basic_ifstream<char,struct std::char_traits<char> >'
e:\编程练习\mao容器家族(文件式.cpp(98) : error C2039: 'cerr' : is not a member of 'basic_ifstream<char,struct std::char_traits<char> >'


e:\编程练习\mao容器家族(文件式.cpp(98) : error C2297: '<<' : illegal, right operand has type 'char [23]'
e:\编程练习\mao容器家族(文件式.cpp(98) : error C2039: 'endl' : is not a member of 'basic_ifstream<char,struct std::char_traits<char> >'
e:\编程练习\mao容器家族(文件式.cpp(102) : error C2039: 'populate_map' : is not a member of 'basic_ifstream<char,struct std::char_traits<char> >'
e:\编程练习\mao容器家族(文件式.cpp(102) : error C2039: 'infile' : is not a member of 'basic_ifstream<char,struct std::char_traits<char> >'
e:\编程练习\mao容器家族(文件式.cpp(102) : error C2039: 'families' : is not a member of 'basic_ifstream<char,struct std::char_traits<char> >'
e:\编程练习\mao容器家族(文件式.cpp(103) : error C2039: 'string' : is not a member of 'basic_ifstream<char,struct std::char_traits<char> >'
e:\编程练习\mao容器家族(文件式.cpp(103) : error C2146: syntax error : missing ';' before identifier 'familyname'
e:\编程练习\mao容器家族(文件式.cpp(103) : error C2039: 'familyname' : is not a member of 'basic_ifstream<char,struct std::char_traits<char> >'
e:\编程练习\mao容器家族(文件式.cpp(104) : error C2039: 'cin' : is not a member of 'basic_ifstream<char,struct std::char_traits<char> >'
e:\编程练习\mao容器家族(文件式.cpp(104) : error C2039: 'familyname' : is not a member of 'basic_ifstream<char,struct std::char_traits<char> >'
e:\编程练习\mao容器家族(文件式.cpp(105) : error C2039: 'query_map' : is not a member of 'basic_ifstream<char,struct std::char_traits<char> >'
e:\编程练习\mao容器家族(文件式.cpp(105) : error C2039: 'familyname' : is not a member of 'basic_ifstream<char,struct std::char_traits<char> >'
e:\编程练习\mao容器家族(文件式.cpp(105) : error C2039: 'families' : is not a member of 'basic_ifstream<char,struct std::char_traits<char> >'
e:\编程练习\mao容器家族(文件式.cpp(106) : error C2039: 'display_map' : is not a member of 'basic_ifstream<char,struct std::char_traits<char> >'
e:\编程练习\mao容器家族(文件式.cpp(106) : error C2039: 'families' : is not a member of 'basic_ifstream<char,struct std::char_traits<char> >'
e:\编程练习\mao容器家族(文件式.cpp(106) : error C2039: 'cout' : is not a member of 'basic_ifstream<char,struct std::char_traits<char> >'
执行 cl.exe 时出错.

mao容器家族(文件式.obj - 1 error(s), 0 warning(s)


面对这么多不解的错误,不知如何下手
[解决办法]
后面的错误很多是有前面造成的, 所以调试时只从第一个error开始, 改完再编译, 然后继续改第一个.
[解决办法]
语法错误,根据提示修正。

调试一般有条件就断点后单步。
[解决办法]
象这种编译没通过的,只能根据错误提示,找到相应位置,一一修改
如果编译通过了,可以通过断点、单步跟踪等进行调试,
也可以通过多次printf,分析打印结果进行调试。
------解决方案--------------------



#include<iostream>
#include<fstream>
#include<vector>
#include<string>
#include<map>
using namespace std;
typedef vector<string>vstring;
void populate_map(ifstream &infile,map<string,vstring>&map_name)
{
string textline;
while(getline(infile,textline))
{
string fam_name;
vector<string>child;
string::size_type pos=0,pre_pos=0,text_size=textline.size();
//找出一空格符分割开来的所有单词
while((pos=textline.find_last_of(' ',pos))!=string::npos)
{
string::size_type end_pos=pos-pre_pos;
if(!pre_pos)
fam_name=textline.substr(pre_pos,end_pos);
else
child.push_back(textline.substr(pre_pos,end_pos));
pre_pos=++pos;
}
//处理之后一个孩子的姓名
if(pre_pos<text_size)
child.push_back(textline.substr(pre_pos,pos-pre_pos));
if(!map_name.count(fam_name))
map_name[fam_name]=child;
else
{
cerr<<"we have have a "<<fam_name<<"family in our family"<<endl;
}
}
}

void dispaly_map( const map<string,vstring>&family,ostream &os)
{
map<string,vstring>::const_iterator iter=family.begin();
while(iter!=family.end())
{
os<<iter->first<<" ";
if(iter->second.empty())
os<<"has no children:"<<endl;
else
{
vector<string>::const_iterator it=iter->second.begin();
while(it!=iter->second.end())
{
os<<*it<<" ";
it++;
}
os<<endl;
}
iter++;
}
}

void quer_map(const string &family,const map<string,vstring>&families)
{
map<string,vstring>::const_iterator it=families.find(family);
if(it!=families.end())
{
cout<<"sorry,the"<<family<<" is not exist"<<endl;
return;
}
cout<<"the"<< family;
if(!it->second.size())
cout<<"has no childen"<<endl;
else
{
//打印出vector中的所有小孩
vector<string>::const_iterator iter=it->second.begin();
while(iter!=it->second.end())
{
cout<<*iter<<" ";
iter++;
}

cout<<endl;

}
}

int main()
{

map<string,vstring>families;
char filename[50]; //......
string str;

cout<<"输出文件名"<<endl;
cin>>filename;
ifstream infile(filename);
if(!infile)
{
cerr<<"can't open for reading"<<endl;
return -1;
}

populate_map(infile,families);
string familyname;
while(cin>>familyname)
quer_map(familyname,families); // 函数的定义要和声明的时候一样,细心点
dispaly_map(families,cout);
return 0;
}

读书人网 >C++

热点推荐