【问题标题】:initialize Class and list初始化类和列表
【发布时间】:2013-12-06 02:53:00
【问题描述】:

我声明自己是 C++ 的初学者。 这是我第一次使用类,我想我把指针弄得一团糟。 直到今天,我一直使用结构体,但使用私有成员时我就搞砸了。

我需要创建:

class Army{
private:
    WarriorEl* lista;
    int lungh = 0;
public:
    Army();
    ....other methods.....
};

class WarriorEl{
private:
    Warrior war;
    WarriorEl* pun;
public:
    WarriorEl();
    WarriorEl(int health, int mana, int index, float experience);
    ....other methods.....
};

class Warrior{
private:
    int health;
    int mana;
    int index;
    float experience;
public:
    Warrior();
    Warrior(int health, int mana, int index, float experience);
    ....other methods.....
};

在编译中它很好,但是当我运行代码时,它会在变量初始化时崩溃。

主要:http://codepad.org/Hm5mhsJv

Army.h http://codepad.org/AHM0OTxQ

Army.cpp http://codepad.org/Uuql3Wud

WarriorEl.h http://codepad.org/o3Q1V3Gf

WarriorEl.cpp http://codepad.org/AumIpNdo

Warrior.h http://codepad.org/x52A66fF

Warrior.cpp http://codepad.org/F5QZxnH9

【问题讨论】:

  • 它是如何崩溃的?你得到什么错误?
  • 第一件事很明显:您正在处理原始指针,但没有声明复制构造函数、析构函数或赋值运算符。如果您要通过原始指针手动管理内存,这些是必须的。您也没有显示构造函数的实现和指针的初始化;它们可以被默认初始化,这在 C++ 中对于原始指针意味着它们具有随机的、未定义的值。 (不,我没有点击链接)。
  • 错误是:“AIV11_WarriorConClassi.exe 中 0x00A32AE6 中的未处理异常:0xC0000005:访问冲突写入位置 0x00000010。” @nathan 那我该怎么办?据我了解,我必须为每个类编写构造函数,但是,我认为我已经做到了。

标签: c++ list class private-members


【解决方案1】:

当我们尝试写入一些未分配的空间时会出现此错误。

请检查您的循环和极端情况,以确认没有越界访问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2015-05-22
    • 1970-01-01
    • 2021-08-08
    • 2016-06-14
    • 2011-06-18
    • 2012-08-02
    相关资源
    最近更新 更多