簡體   English   中英

C++ 對象數組指針

[英]C++ Object Array Pointer

我是 C++ 數組和指針的新手,遇到了一些問題。 我對我編寫的以下代碼有一些疑問。

版本 1:

int main() 
{  
  string a, b;
  int age;
  Dog d[5];
  Dog *p = new Dog[5];

  for (int i = 0; i < 5; i++)
  {
    d[i].setwe(3 * i);
    d[i].setag(i);
    p[i] = Dog(d[i]);
  }

  p[5]->showCnt();
  //^^^^^^^^^^^^^^ Error above
  for (int j = 0; j < 5; j++)
  {
    delete [] p;
  }
  return 0;
}

版本 2:

int main() 
{  
  string a, b;
  int age;
  Dog d[5];
  Dog *p[5];

  for (int i = 0; i < 5; i++)
  {
    d[i].setwe(3 * i);
    d[i].setag(i);
    //p[i] = Dog(d[i]);
    p[i] = &d[i];
  }

  p[5]->showCnt();
  return 0;
}

據我所知,我可能在版本 1 中寫錯了,但我想了解為什么 p 在版本 1 中不被視為指針?

這是我從錯誤中得到的提示: '->' 的基操作數具有非指針類型 'Dog'

我也不確定哪個是將對象數組復制到指針對象數組的更好方法(版本 1 或版本 2)。 如果我理解錯誤,我想提前道歉。 謝謝你。

p[5]->showCnt()是非法的,因為您的對象數組只有 5 個位置,從 0 開始到 4 結束。因此,您只需將p[5]->showCnt()替換為p[4]->showCnt()

關於更好的版本,如果您想使用靜態大小,請使用版本 2,如果您想動態管理p以在程序運行時的某個時刻使用 5 個以上的對象,請使用版本 1。 簡短回答:版本 1 更好!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM