C++ 具有常量引用的Init成员数据
我想创建一个基本类C++ 具有常量引用的Init成员数据,c++,templates,C++,Templates,我想创建一个基本类PElement。为了实现我的链表,我希望该对象PElement有一个指向下一个PElement的指针和一个指向值的指针,该值是T的一个实例 这是我写的: template<class T> class PElement { public: //Données membre PElement * s; T * v; //Constructeur PElement(
PElement
。为了实现我的链表,我希望该对象PElement
有一个指向下一个PElement
的指针和一个指向值的指针,该值是T的一个实例
这是我写的:
template<class T>
class PElement {
public:
//Données membre
PElement * s;
T * v;
//Constructeur
PElement(
const PElement * suivant,
const T *valeur
):s(suivant),v(valeur){}
};
最后是我得到的错误:
error C2440: 'initializing' : cannot convert from 'const PElement<double> *' to 'PElement<double> *'
error C2439: 'PElement<double>::s' : member could not be initialized
错误C2440:“正在初始化”:无法从“const PElement*”转换为“PElement*”
错误C2439:“PElement::s”:无法初始化成员
(第二个参数v(v表示值)的两个错误相同)
我的代码有什么问题,如何修复?您的构造函数:
//Constructeur
PElement( const PElement * suivant, const T *valeur)
:s(suivant)
,v(valeur)
{}
尝试使用suivant
初始化s
即PElement*
,即
const PElement*
<> > C++不允许。这样做是错误的,因为constpelement*
意味着指向的对象是不可变的,而PElement*
意味着指向的对象是可变的
您的初始化尝试丢失该不变性限定符。
您可以通过接受构造函数的非常量值立即修复它:
//Constructeur
PElement( PElement* suivant, T* valeur)
:s(suivant)
,v(valeur)
{}
<>但是我们大多不在C++中制作自己的链表。相反,我们使用
std::list
或std::list
当我们需要双打或字符串的链接列表时。神圣过度使用new
Batman!你以前用什么语言?如果我们知道,就越容易解释差异。是Java
?你不能安全地将const PElement*
分配给PElement*
。是的,我开始用Java学习。好的,我想我明白了。谢谢你的解释,我们正在尝试在C++中创建一个图形的通用实现,这就是我们在课堂上用自己的手创造一切的原因。为了理解我们所做的事情,@ DurLayC++标准库不包含泛型图,但在Booost图形库中有一些免费的实现。
//Constructeur
PElement( PElement* suivant, T* valeur)
:s(suivant)
,v(valeur)
{}