我想创建一个从矢量单元格中获取对象并修改它的函数。首先,我需要通过引用该函数来传递此单元格,但我不能这样做。
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 &
类型的引用。
答案 0 :(得分:3)
shapeArr[choice]
将返回Shape*
,但该方法需要Circle&
。
我假设Circle
是Shape
的子类。
您需要dynamic_cast
将Shape*
向下转换为Circle*
,然后您想要取消引用指向某个值的指针,以便您可以通过引用传递它
在投射之前,您需要验证Shape*
是否实际指向Circle
(而不是Rectangle
或Torus
)并处理此情况#39;吨
答案 1 :(得分:1)
你不能用指针初始化引用(当然,除非它是对指针的引用) - 正是编译器所说的。更改函数签名以接受指针,或使用取消引用的对象调用函数,或将std::ref
存储在容器中。这是假设Shape
是Circle
的后代(稍微有点古怪)。
示例:
void circleChoiceOne(Circle* object);
或者
circleChoiceOne(*shapeArr[choice]);
或者
vector<std::ref<Shape>> shapeArr;