如何将vector的单元格传递给C ++中的函数?

时间:2017-01-13 15:51:30

标签: c++ class object vector pass-by-reference

我想创建一个从矢量单元格中获取对象并修改它的函数。首先,我需要通过引用该函数来传递此单元格,但我不能这样做。

import UIKit

class MyCustomTextField: UITextField {

    override func caretRect(for position: UITextPosition) -> CGRect {
        return CGRect.zero
    }

    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {

        if action == #selector(copy) || action == #selector(cut) || action == #selector(paste){
            return false
        }
        else {
            return super.canPerformAction(action, withSender: sender)
        }
    }
}

我得到的错误指向第7行,它说: 无法使用void circleChoiceOne(Circle& object); vector<Shape*> shapeArr; int main() { circleChoiceOne(shapeArr[choice]); return 0; system("PAUSE"); } 类型的值初始化Circle &类型的引用。

2 个答案:

答案 0 :(得分:3)

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

我假设CircleShape的子类。

您需要dynamic_castShape*向下转换为Circle*,然后您想要取消引用指向某个值的指针,以便您可以通过引用传递它

在投射之前,您需要验证Shape*是否实际指向Circle(而不是RectangleTorus)并处理此情况#39;吨

答案 1 :(得分:1)

你不能用指针初始化引用(当然,除非它是对指针的引用) - 正是编译器所说的。更改函数签名以接受指针,或使用取消引用的对象调用函数,或将std::ref存储在容器中。这是假设ShapeCircle的后代(稍微有点古怪)。

示例:

void circleChoiceOne(Circle* object);

或者

circleChoiceOne(*shapeArr[choice]);

或者

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