繁体   English   中英

如何在类中重新分配指针数组?

[英]How to reallocate array of pointers in class?

我的课程为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;

但是编译器给了我这个:

将“公民* [[((((sizetype))+ 1)]”分配给“公民* [1000]”时类型不兼容

有人知道如何解决吗? 谢谢。

使用std::vector<Citizen>而不是数组,问题可能会自行消失。 std::vector这样的标准容器会自动为您管理所有内存。 您最终将在代码中完全没有newdelete[]

只是为了给您一个想法,这就是您的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而不是数组是完全相同的改进。

如果要坚持使用数组,只需确保数组声明中的size参数实际上是常量,而不是变量。 然后分配一个新数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM