我是C ++的新手,知道这个错误是什么。代码如下。
问题:
在下面的示例中,Circle和Square继承自抽象基类Shape。
int main()
{
std::vector<Shape> shapes; //Error!
Circle c (5);
Square s(4);
shapes.push_back(c);
shapes.push_back(s);
return 0;
}
答案 0 :(得分:3)
显然你已经将Shape类型定义为一个抽象类型,其中Circle和Square是从Shape派生的类型。
您通常会做的是;
std::vector<Shape*> shapes ;
并使用形状矢量将搬运工存储到正方形和圆形。
shapes.push_back (&c) ;
shapes.push_back (&s) ;
答案 1 :(得分:1)
如果您正在使用对象,则存储指向向量中这些对象的指针。指针只是引用对象在内存中的位置。当您使用关键字“new”时,内存分配器会返回指向已分配内存的指针。
vector<Shape*> shapes; // EDIT: I originally some bad syntax here
Circle *c = new Circle(5); // variable c is a pointer, that points to a type Circle
Square *s = new Square(4); // variable s is a pointer, that points to a type Square
shapes.push_back(c); // stores pointer c into array
shapes.push_back(s); // stores pointer s into array
如果您使用存储在堆栈中的数据,那么您可以使用'&amp;'获得指向结构地址的指针。符号
vector<Shape*> shapes; // EDIT: I originally some bad syntax here
Circle c(5); // Circle structure on the stack
Square s(4); // Square structure on the stack
shapes.push_back(&c); // stores pointer c into array
shapes.push_back(&s); // stores pointer s into array