代码错误!!!

levis_caval 2009-05-26 12:27:08
#include<iostream>

using namespace std;

class Item
{
public:
Item(char* name, int age)
{
if (NULL == name)
{
m_name = new char[10];
strcpy(m_name, "未命名");
}
else
{
m_name = new char[strlen(name)+1];
strcpy(m_name, name);
}
m_age = age;
Next = NULL;
}
~Item()
{
if (m_name)
{
delete []m_name;
m_name = NULL;
}
}

void Display()
{
cout << this->m_name <<":"<< this->m_age <<endl;
}

int m_age;
char* m_name;
Item* Next;
};

class list
{
public:
list()
{
m_head = NULL;
m_tail = NULL;
m_len = 0;
}
~list()
{

}

bool IsEmpty()
{
return (m_len == 0);
}

void CreatNode(char* name, int age =0)
{
Item* node = new Item(name, age);

if ((m_head == m_tail) && (m_head == NULL))
{
m_head = node;
m_tail = node;
m_head->Next = NULL;
m_tail->Next = NULL;
m_len = 1;
}
else
{
m_tail->Next = node;
m_tail = m_tail->Next;
m_tail->Next = NULL;
}
}

bool DelNode(int index, int offset=0)
{

return false;
}

Item* Locate(int index, int offset=0)
{
Item* node = NULL;
if (index<0 || index>m_len)
{
return NULL;
}
switch (offset)
{
case 0:
{
node = m_head;
int stedp =0;
while(node)
{
if(index == stedp+1)
{
return node;
}
stedp++;
node = node->Next;

}
if (index != stedp+1)
{
break;
}
return node;
}
break;
case 1:
{

}
break;
}
return NULL;
}



Item* operator[](int index)
{
if(index<0 || index>=m_len)
{
return NULL;
}
else
{
return Locate(index+1);
}
return NULL;
}

void Display()
{
Item* node = m_head;

while(node)
{
cout << node->m_name<<":"
<< node->m_age <<endl;
node = node->Next;
}
}
private:
Item* m_head;
Item* m_tail;
int m_len;
};

int main()
{
list* s = new list;
s->CreatNode("nam", 34);
s->CreatNode("nX", 34);
s->CreatNode("nD", 34);
s->CreatNode("nXXm", 34);

s[2].Display();

delete s;


return 0;
}


运行结果如下:
_8:3672120

我想输出相应的第二项,去输出了这个,想问下这是哪里的问题?还请大家不吝赐教?是否是对象的生命周期的问题!如果是请标出位置
...全文
92 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
leegongbo 2009-05-26
  • 打赏
  • 举报
回复
s[2].Display();

s[2] 不存在这样的用法吧。所以打出来的结果乱七八遭

如果要取第二项,使指针从头开始,移动一次就可以取到item,然后打印就行了。
pengzhixi 2009-05-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 goodname 的回复:]
(*s)[2]->Display();
或者
list &sx = *s;
sx[2]->Display();

另外
void CreatNode(char* name, int age =0)
{
Item* node = new Item(name, age);

if ((m_head == m_tail) && (m_head == NULL))
{
m_head = node;
m_tail = node;
m_head->Next = NULL;
m_tail->Next = NULL;
m_len = 1;
}
else
{
m_tail->Next = node;
m_tail = m_tail->Next;
m_tail->Next = NULL;
m_len++;// …
[/Quote]
up
另外

Item(char* name, int age)
{
if (NULL == name)
{
m_name = new char[10];
strcpy(m_name, "未命名");
m_name[9]='\0';//加了这句
}
else
{
m_name = new char[strlen(name)+1];
strcpy(m_name, name);
m_name[strlen(name)]='\0';//加了这句
}
m_age = age;
Next = NULL;
}

goodname 2009-05-26
  • 打赏
  • 举报
回复
(*s)[2]->Display();
或者
list &sx = *s;
sx[2]->Display();

另外
void CreatNode(char* name, int age =0)
{
Item* node = new Item(name, age);

if ((m_head == m_tail) && (m_head == NULL))
{
m_head = node;
m_tail = node;
m_head->Next = NULL;
m_tail->Next = NULL;
m_len = 1;
}
else
{
m_tail->Next = node;
m_tail = m_tail->Next;
m_tail->Next = NULL;
m_len++;//<----------------------------这里需要+1
}
}

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧