我有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 :(得分:3)
使用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
代替数组是完全相同的改进。
答案 1 :(得分:0)
如果你想坚持使用数组,只需确保数组声明中的size参数实际上是一个常量,而不是变量。然后分配一个新数组。