【问题标题】:2D Vector of Class gets error when accessing function访问函数时类的二维向量出错
【发布时间】:2015-04-18 05:08:44
【问题描述】:

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

#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

【问题讨论】:

  • 你遇到了什么错误?
  • @DanielBocksteger 根据 Ideone 的说法,我得到一个运行时错误,并且 code::blocks 什么也没说,只是进程返回了一个非常长的数字

标签: c++ class vector 2d-vector


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 我使用指针的原因主要是因为互联网告诉我这样做,并且在某处它说那行不通,你必须使用指针。但是感谢您指出我对互联网的轻信
  • @Orfby 现在互联网告诉你不要使用它们!现在怎么办? :P
  • @BartekBanachewicz 你是在告诉我互联网现在才告诉我这个?根据我的经验,互联网在所有事情上都存在分歧!
  • 我不同意互联网本身不同意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多