だから私は双方向にリンクされたリストの実装を書いています。これは、個々のノードを実装するクラスのコンストラクターです。
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 ) : キー(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 ) : キー(a_key)、前(a_prev)、次(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 ) : キー(a_key), prev(&a_prev), next(&a_next) {}
dnode.cpp:6:104: エラー: タイプ 'DNode *' のメンバー サブオブジェクトをタイプ 'const DNode *' の右辺値で初期化できません DNode::DNode( const int a_key, const DNode& a_prev, const DNode& a_next ) : キー(a_key), prev(&a_prev), next(&a_next) {}
dnode.cpp:15:52: エラー: 互換性のない型 'const DNode *' から 'DNode *' に割り当てています void DNode::set_prev( const DNode& a_prev ) { prev = &a_prev; }
dnode.cpp:16:52: エラー: 互換性のない型 'const DNode *' から 'DNode *' に割り当てています void DNode::set_next( const DNode& a_next ) { next = &a_next; }
繰り返しますが、コンストラクタのパラメータリストに書いているのは、コンストラクタによって変更されconst DNode& a_prev
ないようにしたいからです(ただし、外部で変更されてもかまいません)。a_prev
しかし、それは機能していないためconst
、このコンテキストでの使用法を誤解している可能性があります。