【发布时间】:2013-10-17 10:03:28
【问题描述】:
所以我正在编写一个双向链表的实现。这是实现单个节点的类的构造函数:
DNode::DNode(const int a_key, const DNode* a_prev, const DNode* a_next)
: key(a_key), prev(a_prev), next(a_next) {}
我之所以写const int a_key, const DNode* a_prev, const DNode* a_next是因为构造函数没有理由修改它们。所以我只是想保护自己免于在构造函数中进行任何不需要的修改。这是好事吗?
编译输出如下错误:
dnode.cpp:6:89: 错误:无法初始化类型的成员子对象 'DNode *' 的左值类型为 'const DNode *' DNode::DNode( const int a_key, const DNode* a_prev, const DNode* a_next) : key(a_key), 上一个(a_prev),下一个(a_next){}
dnode.cpp:6:103:错误:无法初始化成员 'DNode *' 类型的子对象,左值类型为 'const DNode *' DNode::DNode(const int a_key, const DNode* a_prev, const DNode* a_next ) : key(a_key), prev(a_prev), next(a_next) {}
我不明白错误信息。 DNode* 是指针类型,而不是左值。欢迎任何帮助。
=== 编辑 ===
我将我的代码修改为以下内容。
dnode.h
class DNode {
public:
//
DNode( const int a_key, const DNode& a_prev, const DNode& a_next );
//
int get_key() const;
DNode* get_prev() const;
DNode* get_next() const;
//
void set_key( const int a_key );
void set_prev( const DNode& a_prev );
void set_next( const DNode& a_next );
//
private:
int key;
DNode* prev;
DNode* next;
};
dnode.cpp
//
DNode::DNode( const int a_key, const DNode& a_prev, const DNode& a_next )
: key(a_key), prev(&a_prev), next(&a_next) {}
//
int DNode::get_key() const { return key; }
DNode* DNode::get_prev() const { return prev; }
DNode* DNode::get_next() const { return next; }
//
void DNode::set_key( const int a_key ) { key = a_key; }
void DNode::set_prev( const DNode& a_prev ) { prev = &a_prev; }
void DNode::set_next( const DNode& a_next ) { next = &a_next; }
我收到以下错误消息
dnode.cpp:6:89: 错误:无法初始化类型的成员子对象 'DNode *' 右值类型为 'const DNode *' DNode::DNode( const int a_key, const DNode& a_prev, const DNode& a_next) : key(a_key), 上一个(&a_prev),下一个(&a_next){}
dnode.cpp:6:104:错误:无法初始化成员 “DNode *”类型的子对象,右值类型为“const DNode *” DNode::DNode( const int a_key, const DNode& a_prev, const DNode& a_next ) : key(a_key), prev(&a_prev), next(&a_next) {}
dnode.cpp:15:52: 错误: 分配给'DNode *' from 不兼容类型 'const DNode *' void DNode::set_prev( const DNode& a_prev ) { prev = &a_prev; }
dnode.cpp:16:52:错误:从不兼容的类型分配给“DNode *” 'const DNode *' void DNode::set_next( const DNode& a_next ) { next = &a_next; }
再一次,我在构造函数的参数列表中写const DNode& a_prev的原因是因为我想防止a_prev被构造函数修改(但我不在乎它是否被外部修改)。但由于它不起作用,我可能误解了const 在这种情况下的用法。
【问题讨论】:
-
如何将参数传递给构造函数?
-
我刚刚编辑了您的构造函数代码,将其分成两行,使其更具可读性。
标签: c++ pointers constants parameter-passing