0

我有一个名为 List 的抽象类和一个名为 AbstractIterator 的内部类。

我有一个从 List 继承的名为 ArrayList 的类和从 List::AbstractIterator 继承的名为 Iterator 的内部类。

我正在尝试在抽象 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

我究竟做错了什么?

4

1 回答 1

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会导致未定义的行为,如果不是。

于 2013-07-05T16:08:09.793 回答