C++ C++;与';运算符=';在'*福

C++ C++;与';运算符=';在'*福,c++,C++,班级形态。类三角形继承形状,默认构造函数。我使用上面的方法制作foo三角形的第一个元素,并给出: 与'*foo=(((三角形*)运算符新(20u)),((>Triangle::Triangle(),)中的'operator='不匹配。 候选者是:Shape&Shape::operator=(const Shape&)foo[0]的类型是Shape。您不能将三角形*分配给foo[0]。您需要的是: Shape *foo = new Shape[2]; foo[0] = new Triangle()

班级形态。类三角形继承形状,默认构造函数。我使用上面的方法制作foo三角形的第一个元素,并给出:
与'*foo=(((三角形*)运算符新(20u)),((>Triangle::Triangle(),)中的'operator='不匹配。

候选者是:Shape&Shape::operator=(const Shape&)
foo[0]的类型是
Shape
。您不能将
三角形*
分配给
foo[0]
。您需要的是:

Shape *foo = new Shape[2];
foo[0] = new Triangle();
在调用之前,请确保删除
foo
的内容

Shape** foo = new Shape*[2];
foo[0] = new Triangle();
更好的选择

使用
std::unique\u ptr
s的
std::vector

delete [] foo;
std::vector foo;
foo.push_back(std::unique_ptr(new Triangle());

然后,您不必担心显式释放内存
std::vector
将注意删除
std::unique\u ptr
s。当删除
std::unique\u ptr
s时,它们将删除所指向的对象。

foo[0]的类型为
Shape
。您不能将
三角形*
分配给
foo[0]
。您需要的是:

Shape *foo = new Shape[2];
foo[0] = new Triangle();
在调用之前,请确保删除
foo
的内容

Shape** foo = new Shape*[2];
foo[0] = new Triangle();
更好的选择

使用
std::unique\u ptr
s的
std::vector

delete [] foo;
std::vector foo;
foo.push_back(std::unique_ptr(new Triangle());

然后,您不必担心显式释放内存
std::vector
将注意删除
std::unique\u ptr
s。当删除
std::unique\u ptr
时,它们将删除指向的对象。

您想要
Shape
数组还是
Shape*
数组?我可以在其中投射第一个元素三角形和第二个矩形的数组形状…您想要
Shape
数组吗,或者一个
形状的数组*
?一个可以投射第一个元素三角形和第二个矩形的数组形状…请不要教人们使用内置数组和原始指针以及
删除
。我更喜欢
std::vector
,因为它会自动管理数组的生存期和对象分配。@n.m。谢谢你的轻推。@cdhowie,在你写评论时,我正在更新答案,以便使用它。请不要教人们使用内置数组和原始指针以及
delete
。我更喜欢
std::vector
,因为它会自动管理数组和对象分配的生存期。@n.m.谢谢你的提示。@cdhowie,我正在更新答案,以便在你写评论时使用。