3

だから私は双方向にリンクされたリストの実装を書いています。これは、個々のノードを実装するクラスのコンストラクターです。

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、このコンテキストでの使用法を誤解している可能性があります。

4

3 に答える 3