Как перераспределить массив указателей в классе?

У меня есть класс Citizen {строковое имя, адрес …}, а затем у меня есть класс TaxRegister.

class TaxRegister
{
public:
bool Add_citizen ( const string& name, const string& addr );
private:
static const int m_Size=1000;
int m_Index,m_IncrementedSize;
Citizen * m_People[m_Size];
};

bool TaxRegister::Add_citizen( const string& name, const string& addr )
{
....
m_People[m_Index++] = new Citizen( name,addr );
}

Проблема в том, что когда мне нужно добавить более 1000 человек в мой массив;

Я пытался сделать это:

Citizen *tmp[m_IncrementedSize*=2];
for (int i=0; i < m_Index; i++ )
tmp[i]=m_People[i];
delete [] m_People;
m_People=tmp;
m_IncrementedSize*=2;

Но компилятор дает мне это:

несовместимые типы при присвоении «CCitizen * [(((sizetype)) + 1)]» для «CCitizen * [1000]»

Кто-нибудь знает, как это исправить? Спасибо.

0

Решение

использование std::vector<Citizen> вместо массива и проблема, скорее всего, исчезнет сама собой. Стандартный контейнер типа std::vector управляет всей памятью автоматически для вас. Вы закончите с нет new а также delete[] совсем в вашем коде.

Просто чтобы дать вам представление, это то, что ваш Add_citizen функция будет выглядеть так:

void TaxRegister::Add_citizen( const string& name, const string& addr )
{
m_People.push_back(Citizen(name, addr));
}

Вы уже используете std::string вместо char const *, Это хорошо. С помощью std::vector вместо массивов это точно такое же улучшение.

3

Другие решения

Если вы хотите придерживаться массивов, просто убедитесь, что параметр размера в объявлении массива на самом деле является константой, а не переменной. А затем выделите новый массив.

0

По вопросам рекламы [email protected]