我有 Citizen 类 { string name,address ... } 然后我有 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
自动为您管理所有内存。你最终会得到 no 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
而不是数组是完全相同的改进。
关于c++ - 如何在类中重新分配指针数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22439877/