[英]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.