Не могу вызвать функцию подкласса, в C ++ - PullRequest
0 голосов
/ 25 апреля 2018

То, что я делал раньше, было то, что я вызывал функцию моего интерфейса, и он определял в состоянии переключателя благодаря параметру, что делать с данными.Какую специализацию они имеют.

Но теперь, что я пытаюсь создать локальный объект, обработать его, а затем добавить его в мои контейнеры интерфейса.Чтобы сделать это, я должен скопировать все значения моего локального объекта (которые были обработаны) в мой контейнер интерфейса.Поэтому я создал функцию copy_cell в интерфейсе, виртуальную и одну в подклассе.Но всякий раз, когда я пытаюсь это сделать, вызывается функция интерфейса, а не подфункция.

           GridCell_voxel * local_cell;


           local_cell = new GridCell_voxel(m_grid_map( cell2matindex_x(cell_index_x), cell2matindex_y(cell_index_y))->getVoxelResolution(), m_grid_map( cell2matindex_x(cell_index_x), cell2matindex_y(cell_index_y))->getVoxel().size());

           local_cell->process_points(relevant_points, m_mapping_type);

//This is the line I need to change
           local_cell->copy_cell (m_grid_map( cell2matindex_x( cell_index_x), cell2matindex_y( cell_index_y))) ;

У вас есть идеи по дороге?Что мне здесь не хватает?

1 Ответ

0 голосов
/ 27 апреля 2018

Извините за отсутствие информации, я постараюсь раскрыть, как мне удалось и что я на самом деле искал.

Итак, у меня есть контейнер IntefaceCell, называемый m_grid_map, полный ячейки, которая была специализированной. В моем случае m_grid_map заполнен GridCell_voxel, который является подклассом InterfaceCell. Что я хочу сделать, это создать новый локальный GridCell_voxel, скопировать информацию в нем. Затем обработайте информацию, затем скопируйте локальную ячейку в контейнер. Важной частью является dynamic_cast в функции копирования ячеек, который позволяет вам взять InterfaceCell в качестве аргумента, а затем обработать его как GridCell_voxel.

//Main.cpp 
                        GridCell_voxel * local_cell;
                        local_cell = new GridCell_voxel();
                        local_cell->copy_cell (m_grid_map( cell2matindex_x( cell_index_x), cell2matindex_y( cell_index_y)));
                        local_cell->process_points(relevant_points, m_mapping_type);
                        m_grid_map( cell2matindex_x( cell_index_x), cell2matindex_y( cell_index_y))->copy_cell (local_cell);
                        delete local_cell;

//GridCell_voxel.cpp
    void GridCell_voxel::copy_cell(GridCellInterface* cell) {

        GridCell_voxel* voxel_cell = dynamic_cast<GridCell_voxel*>(cell);

        this->m_voxel_start_height = voxel_cell->m_voxel_start_height;
        this->init = true;
        this->m_ground_voxel_position = voxel_cell->m_ground_voxel_position;

    }

Надеюсь, это кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...