У меня есть программа с двумя классами (я буду называть их Master и Slave), с Slave, наследующим от Master. В Slave я определил структуру и массив возможных значений этого типа структуры. Затем Slave создается с индексом массива, значения которого я хочу заполнить переменными из мастер-класса.
Вроде так:
class Master
{
public:
std::string _a;
char _b;
int _c;
int _d;
int _e;
Master(std::string a, char b, int c, int d, int e)
: _a {a}, _b {b}, _c {c}, _d {d}, _e {e} {}
};
class Slave : public Master
{
public:
struct SlaveStruct
{
std::string a;
char b;
int c;
int d;
int e;
};
const SlaveStruct slaveArray[3]
{
{"name_a", 'A', 1, 2, 3},
{"name_b", 'B', 4, 5, 6},
{"name_c", 'C', 7, 8, 9}
};
Slave(int index) : Master {slaveArray[index].a, slaveArray[index].b,
slaveArray[index].c, slaveArray[index].d, slaveArray[index].e} {}
};
Это, однако, выдает ошибку std :: bad_alloc, когда я пытаюсь ее создать. Разбираясь с этим, я обнаружил, что он прекрасно работает, однако, если я просто объявлю массив внутри класса и инициализирую его снаружи, как так:
class Slave : public Master
{
//(...)
static SlaveStruct slaveArray[3];
//(...)
};
Slave::SlaveStruct Slave::slaveArray[3]
{
{"name_a", 'A', 1, 2, 3},
{"name_b", 'B', 4, 5, 6},
{"name_c", 'C', 7, 8, 9}
};
Почему это, однако? Размер этого массива составляет 144 байта, он едва должен оставить вмятину в стеке, и я создаю экземпляр класса только один раз. Попытался отладить его, но после входа в конструктор Slave он заходит в глубокую яму нативных функций C ++, в которой я не могу разобраться, и вскоре выдается ошибка bad_alloc.
ОБНОВЛЕНИЕ : В соответствии с запросом в комментариях класс создается следующим образом:
int main()
{
Slave slave {1}; // For example, any index will throw the same error.
}
Платформы: Windows 10, MSVC 2017.