我什至不确定这是否可能,所以我想澄清一下。我有一个带有 const 字符串数组的父类,我希望它由它的子类初始化,例如:
class CParent{
CParent();
const char** strings;
};
和子类
class CChild:CParent{
CChild();
};
CChild::CChild()
: CParent::strings{
"First",
"Second"
}
{
CParent();
// some code
}
我需要它,因为我将调用 CParent 的构造函数,并且我需要在其中使用字符串。它可以通过参数传递来完成,但我想知道这样的事情是否可能。
编辑: 我在这里重写代码时忘记写一些东西,所以我宁愿复制粘贴它,这样我现在就不会忘记任何东西。在 Andy Prowl 的帮助下,我使用字符串和 vector 重写了它:
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)
最佳答案
以正确的方式进行(此解决方案仅适用于 C++11):
#include <vector>
#include <string>
class CParent
{
protected:
// ^^^^^^^^^^ Make sure your constructor is at least protected,
// or it will be inaccessible to derived classes
CParent(std::vector<std::string> const& s) : strings(s) { };
std::vector<std::string> strings;
// ^^^^^^^^^^^^^^^^^^^^^^^^ Use containers and classes from the C++ Standard
// Library rather than raw pointers
};
class CChild : public CParent
// ^^^^^^^^^^^^^^^^ I suppose you forgot this.
// Inheritance is private by
// default, which does not seem
// to be what you want
{
CChild();
};
CChild::CChild()
:
CParent({"First", "Second"}) // C++11 ONLY!
// ^^^^^^^^^^^^^^^^^^^
// Implicit construction of the vector of string
{
// some code
}
关于c++ - 在子类中初始化父类的 const 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15271501/