C++: передача const *p в списке инициализации

Что я хотел бы сделать, это передать const ListeBase<int> *pListe в моем инициализаторе члена, как то, что в моем.cxx, но он дает мне ошибку, говоря, что он не может конвертировать из 'const' в 'not const'

Я знаю, что мог бы пройти без использования 'const', но мне сказали, что это хорошая привычка ставить const перед переменной, которую вы не собираетесь менять... Итак, в чем причина того, что я не могу передать const в моем инициализаторе члена?:П

.ЧАС

#include "DataSource.h"
#include "ListeBase.h"


class DataSourceSerieDiscrete : public DataSource
{
private : 
    ListeBase<int> *pListe; 

public :
    //CONSTRUCTORS
    DataSourceSerieDiscrete();
    DataSourceSerieDiscrete(const ListeBase<int> *pListeSai);
    DataSourceSerieDiscrete(const DataSourceSerieDiscrete &DSSDSai);

    //SETTERS
    void setPListe(const ListeBase<int> *pListeSai);

    //GETTERS
    const ListeBase<int> *getPListe() const;
};

.cxx

#include "DataSourceSerieDiscrete.h"

DataSourceSerieDiscrete::DataSourceSerieDiscrete() : pListe(NULL) {};
DataSourceSerieDiscrete::DataSourceSerieDiscrete(const ListeBase<int> *pListeSai) : pListe(pListeSai) {};
DataSourceSerieDiscrete::DataSourceSerieDiscrete(const DataSourceSerieDiscrete &DSSDSai) : pListe(DSSDSai.getPListe()) {};

//SETTERS
void DataSourceSerieDiscrete::setPListe(const ListeBase<int> *pListeSai)
{
    pListe = pListeSai;
}

const ListeBase * DataSourceSerieDiscrete<type>::getPListe() const
{
    return pListe;
}

Сообщение об ошибке:

g++ DataSourceSerieDiscrete.cxx -c
DataSourceSerieDiscrete.cxx: In constructor ‘DataSourceSerieDiscrete::DataSourceSerieDiscrete(const ListeBase<int>*)’:
DataSourceSerieDiscrete.cxx:4:101: error: invalid conversion from ‘const ListeBase<int>*’ to ‘ListeBase<int>*’ [-fpermissive]
 DataSourceSerieDiscrete::DataSourceSerieDiscrete(const ListeBase<int> *pListeSai) : pListe(pListeSai) {};
                                                                                                     ^

Та же ошибка в конструкторе копирования

DataSourceSerieDiscrete.cxx: In copy constructor ‘DataSourceSerieDiscrete::DataSourceSerieDiscrete(const DataSourceSerieDiscrete&)’:
DataSourceSerieDiscrete.cxx:5:117: error: invalid conversion from ‘const ListeBase<int>*’ to ‘ListeBase<int>*’ [-fpermissive]
 DataSourceSerieDiscrete::DataSourceSerieDiscrete(const DataSourceSerieDiscrete &DSSDSai) : pListe(DSSDSai.getPListe()) {};
                                                                                                                     ^

2 ответа

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

const ListeBase<int> *pListe;

Тип const * - указатель на объект const. Вы получаете указатель на const-объект и пытаетесь использовать его как указатель на обычный объект, и это запрещает компилятор.

Я бы посоветовал вам прочитать ветку здесь -http://stackru.com/questions/1143262/what-is-the-difference-between-const-int-const-int-const-and-int-const

Удачи!

Другие вопросы по тегам