首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++容器 list与类的运用 请教哪儿错了,为什么

2012-09-28 
c++容器 list与类的运用 请问哪儿错了,为什么?typedef char* size_type//listsize_type myclasslistcl

c++容器 list与类的运用 请问哪儿错了,为什么?
typedef char* size_type;

//list<size_type> myclasslist;

class CFoodRecord
{
public:
CFoodRecord();
~CFoodRecord();

void addCategoryName(char *cn)
{
strcpy(CategoryName, cn);
}

void addSymbolName(char *sn)
{
SymbolName.push_back(sn);
}

char *getCategoryName()
{
return CategoryName;
}

char *getSymbolName( )
{
return *(SymbolName.begin());
}
public:
list<size_type> SymbolName;
size_type CategoryName;
int SymbolNum;
};

CFoodRecord::CFoodRecord()
{
CategoryName = new char[100] ;
//SymbolName.clear();
SymbolNum = 0;
}

CFoodRecord::~CFoodRecord()
{
delete[] CategoryName;
SymbolName.resize(0);
}

void getRecord(list< CFoodRecord > cf);

void getRecord(list<CFoodRecord> cf)
{
list<CFoodRecord>::iterator CStart = cf.begin();
list<size_type>::iterator m_Start = CStart->SymbolName.begin(); //这儿为什么有问题,怎么改
CFoodRecord tempcf;
int M = 0;
int N = 0;
int k, i = 0, j = 0;
char str[100];
char stemp[100];
memset(stemp,'\0',100);
ifstream infile("Food.txt", ios::in);
if (!infile)
{
cout<<"open file error!\n";
return ;
}
while(infile>>str)
{
if (1 == strcmp("<Category", str))
{
infile>>str;
j = 0;
for (k =6; k<= strlen(str) - 3; k++)
{
stemp[j++] = str[k];
}
tempcf.addCategoryName(stemp);
//
memset(stemp,'\0',100);
}
while (infile>>str)
{
if(!(1 == strcmp("</Category>", str)))
{
if (1 == strcmp("<Symbol", str))
{
infile>>str;
j = 0;
for (k =6; k<= strlen(str) - 4; k++)
{
stemp[j++] = str[k];
}
tempcf.addSymbolName(stemp); //这儿应该怎么写
//CStart->SymbolName.push_back(CStart->addSymbolName(stemp));
memset(stemp,'\0',100);
}
}
else if (1 == strcmp("</Category>", str))
{
tempcf.SymbolNum = N;
//M++;
break;
}
}
cf.push_back(tempcf); //这儿这么写对吗
}
}


void showinfo(list<CFoodRecord> cf)
{
list<CFoodRecord>::iterator CStart;
list<size_type>::iterator m_Start;

for (CStart = cf.begin(); CStart != cf.end(); CStart++)
{
cout<<"小明喜欢吃: ";
cout<< CStart->getCategoryName() <<endl;
cout<<"在"<< CStart->getCategoryName() <<"中,他具体喜欢吃: \n";
for (m_Start = CStart->SymbolName.begin(); m_Start != CStart->SymbolName.end(); m_Start++)
{
cout<<CStart->getSymbolName( )<<" "; //这儿这么写对吗
m_Start++;
}
cout<<"\n\n";
}
}

文件内容如下:
<Category Name="meat">
<Symbol Name="pork"/>
<Symbol Name="beef"/>
</Category>
<Category Name="vegetable">
<Symbol Name="potato"/>
<Symbol Name="tomato"/>
</Category>
<Category Name="fruit">
<Symbol Name="apple"/>
<Symbol Name="banana"/>
</Category>

[解决办法]
void getRecord(list<CFoodRecord> &cf)
{
cout << cf.size() << endl;
list<CFoodRecord>::iterator CStart = cf.begin();
list<size_type>::iterator m_Start = CStart->SymbolName.begin();


CFoodRecord tempcf;
int M = 0;
int N = 0;
int k, i = 0, j = 0;
char str[100];
char stemp[100];
memset(stemp,'\0',100);
ifstream infile("d:\\Food.txt", ios::in);
if (!infile)
{
cout<<"open file error!\n";
return ;
}

while(infile >> str)
{
if (0 == strcmp("<Category", str))
{
infile >> str;
j = 0;
for (k = 6; k != strlen(str)-3; k--)
{
stemp[j++] = str[k];
}
tempcf.addCategoryName(stemp);
memset(stemp,'\0',100);
}
while (infile>>str)
{
if(!(0 == strcmp("</Category>", str)))
{
if (0 == strcmp("<Symbol", str))
{
infile>>str;
j = 0;
for (k =6; k != strlen(str)-4; k--)
{
stemp[j++] = str[k];
}
tempcf.addSymbolName(stemp);
memset(stemp,'\0',100);
}
}
else if (0 == strcmp("</Category>", str))
{
tempcf.SymbolNum = N;
break;
}
}
cf.push_back(tempcf);
}
}

看看红色的部分输出结果,你就知道为什么错了···
[解决办法]
哎 你一上来贴几页代码一般没人看的 网上有篇文章叫提问的艺术
[解决办法]
支持楼上,贴代码能贴在代码框里吗?人家给你提供了那么方便的工具,为啥不用呢?》

热点排行