C++ LinkedList导致异常,但不确定原因?
这段代码类似于这里已有的几篇文章,但是我有一个独特的问题。尝试插入对象时,链表导致异常。应该有5名玩家,每个人拥有不同数量的武器,每个武器拥有不同数量的子弹。我不知所措。请帮忙 LinkedList.hC++ LinkedList导致异常,但不确定原因?,c++,linked-list,stack,polymorphism,binary-tree,C++,Linked List,Stack,Polymorphism,Binary Tree,这段代码类似于这里已有的几篇文章,但是我有一个独特的问题。尝试插入对象时,链表导致异常。应该有5名玩家,每个人拥有不同数量的武器,每个武器拥有不同数量的子弹。我不知所措。请帮忙 LinkedList.h template <class T> class LinkedList { public: T *first; LinkedList(); ~LinkedList(); inline bool IsEmpty(); inline void Insert(T *); voi
template <class T>
class LinkedList {
public:
T *first;
LinkedList();
~LinkedList();
inline bool IsEmpty();
inline void Insert(T *);
void Display()const;
T *Find(const int key)const;
T *Delete();
T *Delete(const int key);
};
template <class T>
LinkedList<T>::LinkedList(){
first = 0;
}
template <class T>
LinkedList<T>::~LinkedList(){
}
template <class T>
bool LinkedList<T>::IsEmpty(){
return (first == 0);
}
template <class T>
void LinkedList<T>::Insert(T * newLink){
newLink->next = first; //exception break highlights here
first = newLink;
}
template <class T>
void LinkedList<T>::Display()const {
T *current = first;
while (current != 0) {
current->Display();
current = current->next;
}
}
template <class T>
T *LinkedList<T>::Find(const int key)const {
T *current = first;
while (current->data != key){
if (current->next == 0)
return 0;
else
current = current->next;
}
return current;
}
template <class T>
T *LinkedList<T>::Delete() {
T *temp = first;
first = first->next;
return temp;
}
class Player:public GameObject
{
public:
Player* leftChild;
Player* rightChild;
LinkedList<Weapon>* weapons;
Player();
~Player();
void Display();
bool operator != (const Player&);
bool operator <(const Player&);
};
希望我已经包括了一切。我不知道我做错了什么,也不知道该怎么办。你没有在玩家的构造函数中创建武器对象。cpp:
Player::Player()
{
leftChild = 0;
rightChild = 0;
weapons = new LinkedList<Weapon>;
}
Player::Player()
{
leftChild=0;
rightChild=0;
武器=新的LinkedList;
}
您还可以使武器收集非指针字段更易于管理。还考虑使用STL集合代替您自己(更少的讨厌异常的风险)…
编辑:
是的,黄先生是对的。尝试使用
list
而不是LinkedList
,后者实现了nicepush_front
和push_back
方法,也尽量避免使用指针,除非你真正了解它们的用途 你还需要分配武器。例如,在Player()构造函数中:
Player::Player() {
leftChild = 0;
rightChild = 0;
weapons = new LinkedList<Weapon>;
}
Player::Player(){
leftChild=0;
rightChild=0;
武器=新的LinkedList;
}
否则,
players[0]->武器
指向无效指针,这会导致异常。在新构建的Player
中,武器
指向什么?(后续问题:为什么是指针?)“希望我包含了所有内容”实际上你包含的太多了。我很确定90%的代码与异常无关。另一方面,你包含的太少了,因为你没有告诉我们什么是异常。他确实在他的代码中告诉了一些关于异常的事情//异常中断突出显示在这里除了下面的答案之外,我想让您计算一下您在main()
(ans:4)中声明的players
要保留多少指针。现在数一数你在该数组中填充了多少个(ans:5)。这本身就调用了未定义的行为,即使您“修复”了不确定的武器指针问题。祝贺您!你赢得了年度代码巨墙奖!非常感谢你。我完全错过了。我所要做的就是找出如何给他们武器、弹药、个人身份证,并将其显示在控制台上。希望我能再一次弄明白。非常感谢。这不是你唯一的问题!!当我查看LinkedList类的Insert方法时,我的头开始痛了。是否要插入新链接对象并将此新项的下一项设置为第一项?!?然后,您的第一个对象成为newLink对象(这对于您插入的第一个项目是有效的,但是第二个对象是什么,等等)?那根本不是一个链表@Yellow先生,我真的不太了解C++,知道它有什么问题。LL、堆栈和树文件都提供了,我只需要让其余的工作正常。。。以某种方式
Player::Player()
{
leftChild = 0;
rightChild = 0;
weapons = new LinkedList<Weapon>;
}
Player::Player() {
leftChild = 0;
rightChild = 0;
weapons = new LinkedList<Weapon>;
}