C++与'*foo中的'operator ='不匹配

Gia*_*iou 0 c++

Shape *foo = new Shape[2];
foo[0] = new Triangle();
Run Code Online (Sandbox Code Playgroud)

类形状.Class Triangle继承Shape,默认构造函数.我使用上面的方法来制作foo Triangle的第一个元素并给我: no match for 'operator=' in '*foo = (((Triangle*)operator new(20u)), (<anonymous>->Triangle::Triangle(), <anonymous>))' candidates are: Shape& Shape::operator=(const Shape&)

R S*_*ahu 5

类型foo[0]Shape.你无法分配Triangle*foo[0].你需要的是:

Shape** foo = new Shape*[2];
foo[0] = new Triangle();
Run Code Online (Sandbox Code Playgroud)

确保foo在致电之前删除了内容

delete [] foo;
Run Code Online (Sandbox Code Playgroud)

更好的选择

使用std::vectorstd::unique_ptr秒.

std::vector<std::unique_ptr<Shape>> foo;
foo.push_back(std::unique_ptr<Shape>(new Triangle()));
Run Code Online (Sandbox Code Playgroud)

然后,您不必担心显式释放内存.std::vector将小心删除std::unique_ptrs.当std::unique_ptr删除s时,它们将删除它们指向的对象.

  • 请不要教人们使​​用内置数组和原始指针以及`delete`. (2认同)