У меня есть класс 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]»
Кто-нибудь знает, как это исправить? Спасибо.
использование 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
вместо массивов это точно такое же улучшение.
Если вы хотите придерживаться массивов, просто убедитесь, что параметр размера в объявлении массива на самом деле является константой, а не переменной. А затем выделите новый массив.