C ++ - Основная ошибка с массивами базовых классов - PullRequest
1 голос
/ 14 октября 2011

Я сейчас немного застрял.У меня есть базовый класс под названием BaseBond.ZeroCouponBond и CouponBond наследуются от этого класса.Я ищу, чтобы создать массив, который содержит оба типа облигаций.Вот мой код:

...
BaseBond port[12];

for (int i=0; i < recordCount; i++)
{
    if (bonds[i].CouponRate == 0.0)
        port[i] = new ZeroCouponBond(bonds[i]);
    else
        port[i] = new CouponBond(bonds[i]);
}

Вот ошибка, которую я получаю: error: нет совпадения для 'operator =' in 'port [i]

Я знаю, что это, вероятно, простоисправить и связано с тем, когда я могу объявить объекты в массиве, но я относительно новичок в C ++ и не знаю всех правил.

Заранее спасибо за помощь!

1 Ответ

3 голосов
/ 14 октября 2011

Вам нужно сделать это с помощью указателей:

Измените объявление на следующее:

BaseBond *port[12];

В исходном коде вы пытались назначить указатель на BaseBond. Так что это не скомпилируется.

Кроме того, когда вы используете такое наследование, вы все равно должны использовать указатели, чтобы предотвратить нарезку объектов.

...