c++ - 类的二维 vector 在访问函数时出错

标签 c++ class vector 2d-vector

将我的 2D 数组转换为 2D vector 后(由于我听到的所有赞美),我的程序几乎立即中断,经过一些测试,当程序尝试使用 vector 执行函数时似乎会发生这种情况元素。我做了一些简化的源代码,也有错误:

#include <iostream>
#include <vector>

using namespace std;

class Dog
{
    private:
        int mass, size;
    public:
        void setMass(int);
        void setSize(int);

        int getMass();
        int getSize();
};

void Dog::setMass(int newMass) {mass = newMass;}
void Dog::setSize(int newSize) {size = newSize;}

int Dog::getMass() {return mass;}
int Dog::getSize() {return size;}

int main() 
{
    vector <vector<Dog*> > dogs(10, vector<Dog*> (10));

    dogs[0][0]->setMass(10);
    dogs[0][0]->setSize(5);
    return 0;
}

我还有一个指向 Ideone 的链接,因此更容易测试(以及我测试代码的位置)http://ideone.com/e.js/mqVuv3

最佳答案

您有一个指向 Dog 的指针的二维 vector ,但没有分配任何 Dog 对象。当您初始化 2D vector 时,指针被初始化为 nullptr。取消引用 nullptr 是未定义的行为。

除非你有充分的理由不这样做,否则我建议你只使用 Dogs 的二维 vector :

vector<vector<Dog>> dogs(10, vector<Dog>(10));

然后您将拥有 100 个默认构造的狗,您可以愉快地设置它们的质量和大小:

dogs[0][0].setMass(10);
dogs[0][0].setSize(5);

关于c++ - 类的二维 vector 在访问函数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28562611/

相关文章:

c++ - 模板特化不起作用

c++ - c++中的 "int a, b =0"和 "int a =0; int b = 0"有什么区别?

c++ - 以二进制序列化和反序列化 vector

c++ - 我如何制作指向动态分配对象的指针 vector ?

c++ - 如何初始化指针 vector ?

c++ - 是否可以在 gcc 3.3+ 中以旧方式使用 __func__? (C++)

jquery - 类更改后单击事件不起作用

c# - 使用字符串数组作为对象参数

java - Java 中的构造函数链接

c++ - 用派生类填充基类类型的二维 vector