ссылка суперкласса на объект подкласса

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

Файл: RailExtractionInteractorStyle.h (это мой подкласс, наследующий суперкласс PCLVisualizerInteractor)

#include<pcl/visualization/interactor_style.h>


class RailExtractionInteractorStyle : public pcl::visualization::PCLVisualizerInteractorStyle
{
public:
    RailExtractionInteractorStyle();
};

Файл: RailExtractionInteractor.cpp:

#include "RailExtractionInteractorStyle.h"

RailExtractionInteractorStyle::RailExtractionInteractorStyle()
    : pcl::visualization::PCLVisualizerInteractorStyle()
{
    // just calling super constructor for now
}

Файл: CloudPointPicker.hpp (произвольный класс, использующий класс RailExtractionInteractorStyle)

#include "RailExtractionInteractorStyle.h"

template <typename PointT>
class CloudPointPicker {

protected:


    PointCloudTConstPtr cloud_;
    boost::shared_ptr<pcl::visualization::PCLVisualizer> myview_;


    //attempting to write my own interactor
    RailExtractionInteractorStyle* mystyle_;

public:

    CloudPointPicker() {
        *mystyle_ = new RailExtractionInteractorStyle;

    }

Заявление в конструкторе CloudPointPicker выдает следующую ошибку:

error: no match for ‘operator=’ in ‘*((CloudPointPicker<pcl::PointXYZ>*)this)->CloudPointPicker<pcl::PointXYZ>::mystyle_ = (operator new(480u), (<statement>, ((RailExtractionInteractorStyle*)<anonymous>)))’

Что я делаю неправильно?


person Mustafa    schedule 18.01.2013    source источник
comment
На какую строку указывает это сообщение об ошибке?   -  person Oliver Charlesworth    schedule 19.01.2013
comment
@OliCharlesworth Я думаю, что строка *mystyle_ = new RailExtractionInteractorStyle; в конструкторе.   -  person Grambot    schedule 19.01.2013
comment
Вы пытаетесь сделать *mystyle_ = ... на неинициализированном указателе? Разве мы не затронули это в другом из ваших вопросов?   -  person K-ballo    schedule 19.01.2013
comment
да, это утверждение в конструкторе cloudPointPicker, упомянутое в вопросе. Я не думаю, что это было затронуто в другом из моих вопросов. Это была проблема с шаблоном. На самом деле я пытаюсь инициализировать mystyle_ в этом операторе. Разве это не способ сделать это?   -  person Mustafa    schedule 19.01.2013


Ответы (1)


Вы должны удалить * в начале этой строки:

*mystyle_ = new RailExtractionInteractorStyle;

Оператор new применяется к указателю напрямую, разыменовывать его не нужно.

person Étienne    schedule 18.01.2013
comment
При удалении звездочки возникают две следующие ошибки: undefined reference to RailExtractionInteractorStyle::RailExtractionInteractorStyle() и collect2: ld returned 1 exit status - person Mustafa; 21.01.2013
comment
Вы где-то писали реализацию функции RailExtractionInteractorStyle :: RailExtractionInteractorStyle ()? Кажется, первое сообщение об ошибке, которое вы получили, - это жалоба на то, что ваш компилятор не может найти реализацию. - person Étienne; 22.01.2013