1

私の 2D 配列を 2D ベクトルに変換した後 (私が聞いたすべての賞賛のために)、私のプログラムはほとんどすぐに壊れ、いくつかのテストの後、プログラムがベクトル要素で関数を実行しようとしたときに発生するようです。私はいくつかの単純化されたソースコードを作成しましたが、これにもエラーがあります:

#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

4

1 に答える 1

1

Dog犬へのポインターの 2D ベクトルがありますが、オブジェクトを割り当てていません。2D ベクトルを初期化すると、ポインタは に初期化されnullptrます。a の逆参照nullptrは未定義の動作です。

正当な理由がない限り、次の 2D ベクトルを使用することをお勧めしますDogs

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

次に、デフォルトで構築された 100 匹の Dog があり、喜んでその質量とサイズを設定できます。

dogs[0][0].setMass(10);
dogs[0][0].setSize(5);
于 2015-02-17T13:30:33.060 に答える