C++ LinkedList导致异常,但不确定原因?

C++ 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

这段代码类似于这里已有的几篇文章,但是我有一个独特的问题。尝试插入对象时,链表导致异常。应该有5名玩家,每个人拥有不同数量的武器,每个武器拥有不同数量的子弹。我不知所措。请帮忙

LinkedList.h

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
,后者实现了nice
push_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>;
}