两个内部班级之间的对话
Conversation between 2 inner classes
我有一个叫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
我做错了什么?
由于编译器无法隐式完成转换,并且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
,否则会导致未定义的行为
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- 线程之间的布尔停止信号
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 连接类实例和另一个类实例中的对话框之间的槽和信号
- 在 MFC 对话框和自己的线程上的 OpenGL 控件之间传递消息
- 在 mfc 中的对话框之间传递值
- 两个内部班级之间的对话
- 如何在mfc的两个对话框之间传递数据
- 在不使用tab键的情况下在Windows Mobile中的对话框控件之间移动