2016-10-13 3 views
1

Good Day。私は大学でプロジェクトをコーディングするのに忙しく、node構造体(リンクリストの場合)にどのようにデータメンバを追加できるかを知りたいが、構造体は以前に定義されている。命令がそうでなければ元の構造体にすべてを定義することはできません。ここでC++他の基本クラスから構造体にデータメンバーを追加する

がListAsSSL.hファイルにある、私の構造体である:

struct node 
{ 
    node* next; 
    Object obj; 
}; 

私は別のヘッダファイルにこれを行うことができます:

struct node: node 
{ 
    node* previous; 
}; 

ありがとうございました。私はデコレータパターンを自習するだけでしたが、構造体ではなくクラスで行う方法を示しています。

ありがとうございました。 リチャード

+6

クラスと構造体は同じものですが、アクセスが異なるだけです。 –

+4

いいえ、これはできません。代わりに継承を使用してください。 –

+0

いいえ再定義できません – Raindrop7

答えて

4

いいえあなたのようにstructを拡張することはできません。

struct node 
{ 
    node* next; 
    Object obj; 
}; 

そして、あなたの他のファイルに:このように、代わりに継承して新しいstructを作成

struct newNode: node 
{ 
    node* previous; 
}; 

そして、あなたのクライアントコード、構造体にアクセスするコードでは、あなたは新しいを使用する必要があります構造体の代わりに古いものを使用します。覚えておいてください。これは多くの場合、継承が構築されたものです。既存のクラスにさらに機能を追加するには!

+1

@NathanOliverのデフォルトアクセスは構造体のためにpublicです、いいえ? – user463035818

+0

それは私には間違っているようです、ここで簡略化された[例](http://cpp.sh/6zph)@ NathanOliver –

+1

@ tobi303 Durpです。 classではないstruct。 nvm me – NathanOliver

0

新しい構造体を作成できますか?例:

struct nodeV2 
{ 
    Object obj; 

    nodeV2* next; 
    nodeV2* previous; 
}; 

これは私にとって最も簡単な方法です。このようにして、元の構造体を継承することなく保持することができます。

すべて最高です。

+1

これはリンクされたリストのプリンシパルに違反します。 'next'と' previous'は 'nodeV2'型であってはいけませんか? –

+0

私の側からのコピー貼り間違いだった。私の悪い!ポインタありがとうございます。あなたのアドバイスに従って、問題を修正しました。 – Ehsan

関連する問題