我有一个名为List的抽象类和名为AbstractIterator的内部类。
我有一个名为ArrayList的类,继承自List和内部类,名为Iterator,继承自List :: AbstractIterator。
我正在尝试将抽象的List :: AbstractIterator转换为实现ArrayList :: Iterator。这是代码的一部分:
bool operator!=(typename List<T>::AbstractIterator& it) {
typename ArrayList<T>::Iterator itt = it;
这是我的错误:
[Error] conversion from 'List<int>::AbstractIterator' to non-scalar type 'ArrayList<int>::Iterator' requested
我做错了什么?
答案 0 :(得分:1)
由于转换无法由编译器隐式完成,List<T>::AbstractIterator
是抽象类,因此您需要使用dynamic_cast
转换it
。
bool operator!=(List<T>::AbstractIterator& it)
{
try
{
ArrayList<T>::Iterator itt = dynamic_cast<ArrayList<T>::Iterator&>(it);
// ... other code
}
catch(std::bad_cast& e)
{
// ... handle case where it is not an ArrayList<T>::iterator
}
// ... other code such as return if necessary
}
请注意,dynamic_cast
在无法转换为引用时会引发std::bad_cast
。转换为指针类型时,如果无法进行转换,则会返回nullptr
。
你可以使用static_cast
,但不能保证it
的类型为ArrayList<T>::Iterator
,否则会导致未定义的行为子>