C++ 如何传递向量';将s单元格转换为C++;?

C++ 如何传递向量';将s单元格转换为C++;?,c++,class,object,vector,pass-by-reference,C++,Class,Object,Vector,Pass By Reference,我想做一个函数,从向量的单元格中获取一个对象并对其进行修改。首先,我需要通过引用函数来传递这个单元格,但我不能这样做 void circleChoiceOne(Circle& object); vector<Shape*> shapeArr; int main() { circleChoiceOne(shapeArr[choice]); return 0; system("PAUSE"); } void circlechoice(圆和对象); 矢量形

我想做一个函数,从向量的单元格中获取一个对象并对其进行修改。首先,我需要通过引用函数来传递这个单元格,但我不能这样做

void circleChoiceOne(Circle& object);
vector<Shape*> shapeArr;
int main()
{
    circleChoiceOne(shapeArr[choice]);
    return 0;
    system("PAUSE");
}
void circlechoice(圆和对象);
矢量形耳环;
int main()
{
圆形选择(形状耳环[选择]);
返回0;
系统(“暂停”);
}
我得到的错误指向第7行,它说:
Circle&
类型的引用不能用
Shape*
类型的值初始化您不能用指针初始化引用(当然,除非它是指针引用)-这正是编译器所说的。将函数签名更改为接受指针,或使用解引用对象调用函数,或将
std::ref
存储在容器中。这是假设
形状
的后代(这有点奇怪)

例如:

void circleChoiceOne(Circle* object);

矢量形耳环;

您不能用指针初始化引用(当然,除非它是对指针的引用)——这正是编译器所说的。将函数签名更改为接受指针,或使用解引用对象调用函数,或将
std::ref
存储在容器中。这是假设
形状
的后代(这有点奇怪)

例如:

void circleChoiceOne(Circle* object);

矢量形耳环;

shapeArr[choice]
将返回一个
Shape*
,但该方法需要一个
圆&

我假设
Circle
Shape
的一个子类

您需要一个
dynamic\u cast
形状*
向下转换为
圆形*
,然后您需要取消对某个值的指针的引用,以便通过引用传递它


您需要验证
形状*
是否实际指向
(与
矩形
圆环体
)然后才能进行铸造,如果不指向,则进行处理。

形状*
将返回
形状*
,但该方法需要
圆&

我假设
Circle
Shape
的一个子类

您需要一个
dynamic\u cast
形状*
向下转换为
圆形*
,然后您需要取消对某个值的指针的引用,以便通过引用传递它


您需要验证
形状*
是否实际指向
圆形
(相对于
矩形
圆环体
),然后在不指向圆形的情况下进行处理。

我正在尝试动态铸造:“shapeArr[choice]=dynamic_cast(*Circle);”但它显示的是“Circle”-不允许键入名称。@YazenVid您的问题和我的回答涉及从
向量访问元素,而不是分配给它。另外,您的注释中的代码不会编译,因为
Circle
是一种类型,而不是变量。我正在尝试动态转换:“shapeArr[choice]=dynamic_cast(*Circle);”但它在“Circle”上显示-不允许使用类型名称。@YazenVid您的问题和我的答案涉及从
向量
访问元素,而不是分配给它。此外,注释中的代码不会编译,因为
Circle
是一种类型,而不是变量。它不起作用,它说:“没有合适的从“Shape”到“Circle*”的转换函数。它说:“没有合适的从“Shape”到“Circle*”的转换函数。”
vector<std::ref<Shape>> shapeArr;