Dynami c выделенная матрица - как инициализировать и установить указатели внутри каждой ячейки - C ++ - PullRequest
0 голосов
/ 11 июля 2020

Может ли кто-нибудь сказать мне, почему мои методы набора (setHorizontal и setVertical) не работают?

Когда метод набора завершен, я не вижу изменений в матрице.

Я динамически выделяю матрица (которая является членом класса TrafficSystem). Думаю проблема связана с инициализацией. Но когда вызывается конструктор ячейки, указатели членов класса должны быть инициализированы как nullptr.

TrafficSystem. cc:

void TrafficSystem::populateMatrix() {

    // create the dynamic allocation of the matrix
    _matrix = new cell * [_n];
    for (int i = 0; i < _n; i++) {
        _matrix[i] = new cell[_m];
    }

    // loop over the streets and insert them to the matrix
    for (int st = 0; st < _allStreets.size(); st++)
    {
        street *current_street = &(_allStreets.at(st));
        int x = current_street->getX();
        int y = current_street->getY();
        int length = (current_street->getStreet_length()) / RATIO;

        if (current_street->getDirection() == street::direction::Horizontal) {
            for (int j = y; j < length; j++) {
               _matrix[x][j].setHorizontal(current_street);
            }
        }
        else if (current_street->getDirection() == street::direction::Vertical) {
            for (int i = x; i < length; i++) {
                _matrix[i][y].setVertical(current_street);
            }
        }
}

cell.h:

class cell
{
private:
    const street* _horizontalSt;
    const street* _verticalSt;
public:
    cell(street* horizontalSt = nullptr, street* verticalSt = nullptr): _horizontalSt(horizontalSt), _verticalSt(verticalSt){}  
    ~cell() {};
    const street* getSt1() const { return _horizontalSt; }
    const street* getSt2() const { return _verticalSt; }
    void setHorizontal(const street* st) { _horizontalSt = st;}
    void setVertical(const street* st) { _verticalSt = st; }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...