簡體   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