Я новичок в 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) для копирования массива объектов в объект указателя массив. Я хотел бы заранее извиниться, если я понял это неправильно. Спасибо.