私は次のクラスがあります。コンテナ、要素、その後、例えば要素からを継承クラスのカップル。 ボタン、入力、等...多型とポインタの配列(C++)
コンテナ配列に要素を追加するとき、私は(私のメインの問題を抱えている)は、次のようになります。
「...」いくつかのコンストラクタですContainer c;
c.Add(Button(...));
c.Add(Input(...));
パラメーター。
私はそのコンテナに属するすべての要素を格納するためのポインタの配列を持つコンテナクラスで:
Element ** elements;
しかし、私が抱えている問題は、Addメソッドを実装する方法です私は何かを期待していましたこのように動作します:
void Add(const CControl & newElement){
elements[elemCnt++] = &newElement;
}
(要素アレイが割り当てられている:要素=新要素* [100];)私は、このコンパイルエラーを取得していますが
:
main.cpp: In member function ‘Container& Container::Add(const Element&)’:
main.cpp:138:23: error: invalid conversion from ‘const Element*’ to ‘Element*’
const修飾子を削除すると、適切な候補がないというコンパイルエラーが発生します。
事は、C++で多形性と継承を初めて勉強しているので、これについて間違った方向に進むかもしれません。これに関する最良のアプローチは何でしょうか?
PS:主な方法は同じに見える必要があります。また、ベクターやSTLのものを示唆しないでください。
STLを使用すると何が問題になりますか?なぜあなたはそれを使いたくないのですか?それは人生をはるかに簡単にします –
あなたはここで1つの大きな間違いを犯しました。それは_temporary_変数のアドレスを使用してそれを格納しています。 'Add'への引数は一時的なものに過ぎず、呼び出しが終わった後にオブジェクトは破壊されます。それ以外に、私は@ TonyTheLionに同意します。なぜ、とても良い標準コンテナを使用しないのですか? –
それはおそらく、私は要素をコピーし、動的に割り当てられたコピーのアドレスを格納する必要があります。 STLを使用しない環境でテストされているので、私はSTLを使用できません。 – Smaug