【发布时间】:2020-07-07 18:42:13
【问题描述】:
我是 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]都超出了数组的末尾,而不是对象。
标签: c++ arrays class object pointers