C++ : passing a const *p in initialization list

标签 c++ constants initialization-list

我想做的是传递一个 const ListeBase<int> *pListe在我的成员初始值设定项中,就像我的 .cxx 中的一样,但它给我一个错误,说它无法从 'const' 转换至 'not const'

我知道我可以不使用 'const' 通过它,但有人告诉我,将 const 放在你不会改变的变量之前是一个好习惯...... 那么,我无法通过 const 的背后原因是什么?在我的成员初始值设定项中? :P

.H

#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()) {};
                                                                                                                     ^

最佳答案

您正在将 const 指针分配给非常量指针变量,这是行不通的。您应该将您的成员声明为

const ListeBase<int> *pListe;

关于C++ : passing a const *p in initialization list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35779568/

相关文章:

C++:将成员指针初始化为null?

c++ - 全局模板函数的问题

c++ - 获取可能的屏幕分辨率列表

c# - 收到 'Expression being assigned must be constant' 时

python - 在Python中代表一个特殊的值?

C++:继承字段的初始化

c++ - 用于实时应用程序的音频/MIDI C++ 库

c++ - CLang 3.5 LibTooling:在 clang::VarDecl 中获取变量的文件名

c++ - const_cast 转换为左值引用不会删除常量

c++ - 在这种特定情况下,使用成员初始值设定项列表和在构造函数中赋值有区别吗?