2017-01-13 19 views
0

我想制作一个从矢量的单元格中获取对象并修改它的函数。首先,我需要通过引用该函数来传递这个单元格,而我不能这样做。如何将向量的单元格传递给C++中的函数?

void circleChoiceOne(Circle& object); 
vector<Shape*> shapeArr; 
int main() 
{ 
    circleChoiceOne(shapeArr[choice]); 
    return 0; 
    system("PAUSE"); 
} 

我得到的错误指向到第7行和它说: Circle &类型的引用不能与Shape *类型的值进行初始化。

回答

1

您不能使用指针初始化引用(除非它是指向指针的引用) - 编译器正在说的是什么。将函数签名更改为接受指针,或者使用取消引用的对象调用函数,或将std::ref存储在容器中。这是假设ShapeCircle的后裔(这是稍微bizzare)。

实施例:

void circleChoiceOne(Circle* object); 

或者

circleChoiceOne(*shapeArr[choice]); 

或者

vector<std::ref<Shape>> shapeArr; 
+0

它不工作,它说:形状“从没有合适的转换功能‘’到‘圆*’存在 –

3
shapeArr[choice]

将返回一个Shape*但该方法需要一个Circle&

我假设CircleShape的子类。

您将需要一个dynamic_castShape*垂头丧气到Circle*,那么你会希望取消引用指针的值,这样你就可以按引用传递。

您需要验证Shape*实际指向一个Circle(而不是一个RectangleTorus)铸造前,当它不能处理的情况。

+0

我试图动态铸造: ‘shapeArr [选择] = dynamic_cast的(*圆);’ 但它在“Circle”中表示 - 类型名称不允许 –

+0

@YazenVid你的问题和我的答案关注访问vector中的一个元素,而不是赋值给它,而且你的注释中的代码不会被编译,因为'Circle '是一种类型,而不是一个变量。 – Dai

相关问题