次のクラスがあります:Container、Element 、そしてElementから継承するいくつかのクラス。ボタン、入力など..。
コンテナ配列に要素を追加するときに問題が発生します。main()は次のようになります。
Container c;
c.Add( Button(...) );
c.Add( Input(...) );
ここで、「...」はいくつかのコンストラクターパラメーターです。
コンテナクラスには、そのコンテナに属するすべての要素を格納するためのポインタの配列があります。
Element ** elements;
しかし、私が抱えている問題は、Addメソッドを実装する方法です。私は、このようなものが機能することを望んでいました。
void Add(const CControl & newElement){
elements[elemCnt++] = &newElement;
}
(要素配列が割り当てられます:elements = new Element * [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のものを提案しないでください。