これが可能かどうかさえわからないので、明確にしたいと思います。文字列の const 配列を持つ親クラスがあり、次のような子クラスで初期化したいと考えています。
class CParent{
CParent();
const char** strings;
};
と子クラス
class CChild:CParent{
CChild();
};
CChild::CChild()
: CParent::strings{
"First",
"Second"
}
{
CParent();
// some code
}
CParent のコンストラクターを呼び出し、そこで文字列を使用する必要があるため、これが必要です。引数を通すことでできるのですが、こんなことができないかと思っていました。
編集:ここでコードを書き直すときにいくつか書き忘れたので、コピーして貼り付けて、今は何も忘れないようにします。Andy Prowl の助けを借りて、文字列とベクトルを使用して書き直しました。
class CMenu {
public:
CMenu(std::vector<std::string> const& s);
protected:
std::vector<std::string> choicesStr;
};
CMenu::CMenu(std::vector<std::string> const & s) : choicesStr(s) {
// code code
}
class CGameTypeMenu : public CMenu {
public:
CGameTypeMenu();
};
CGameTypeMenu::CGameTypeMenu()
:CMenu(std::vector<std::string>("aaa","bbb")){ // This is where I
get some nasty errors
}
エラーは次のようになります。
In file included from /usr/include/c++/4.7/vector:63:0,
from CMenu.h:13,
from CGameTypeMenu.h:11,
from CGameTypeMenu.cpp:8:
/usr/include/c++/4.7/bits/stl_uninitialized.h:77:3: required from ‘static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = const char*; _ForwardIterator = std::basic_string<char>*; bool _TrivialValueTypes = false]’
(5+ more similar lines follow)