C ++のconst型に関しては、私はいつも迷子になります。私の問題は本質的にこれらにあります。
次のような状況があります。基本的に2次元のリンクリスト(センチネルを持つリング)であるクラスMatrixと、行を選択して(行を選択する方法)、通過できるイテレーターのようなクラスがあります。それ(operator ++)。これを取得するために、イテレータは3つのポインタを格納します。メインセンチネル、選択されたサブリスト(行)のセンチネル、および現在選択されているノード(カレットという名前を付けましょう)です。operator ++がサブリストセンチネルにヒットした場合-行の終わりに到達し、行選択がメインセンチネルにヒットした場合、マトリックスの終わりに到達しました。
ここで、リストは単一リンクされており、イテレーターに削除機能を提供させたいのでNode**
、現在のノードフィールドのタイプをイテレーターに格納することにしました。しかし、これはコンストラクターでいくつかの問題を引き起こします。
私は、2つのタイプのコンストラクターを許可することにしました。1つはMatrixを使用し、もう1つは他のイテレーターを使用します。そして、これが私の問題です。マトリックスから作成されたイテレーターの初期状態では、すべてのポインターが同じポイント(メインセンチネル)にあります。さて、g ++が私に言っていることから、私のコンストラクターMatrix
は型をとらなければならないようconst Matrix&
です。しかし、もしそうなら、私は自分のカレット(であるNode**
)にマトリックス自身のポインターへのポインターを割り当てることができません。なぜなら、それはconstであり、カレットはconstではないからです。
どうすればこれを解決できますか?コンストラクターが非定数エンティティを取得できないのはなぜですか?コンストラクター内でマトリックスをconstからnon-constに変換できますか?そのためのヒントを事前に感謝します。