- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在研究 UI。 UI 组件的基类是 UILayout
,整个 UI 是一棵 UILayout 对象树,根是代表整个屏幕的 UILayout。为了包含这个层次结构,任何给定的 UILayout 都有一个 boost::shared_ptr<UILayout>
的 vector mChildren .
UIManager 对象负责更新 UILayout 的整个层次结构。对 Update 的每次调用都会遍历 vector mChildren,递归地对每个 child 调用 Update。
因为更改 vector 的形状会使那些迭代器失效,所以从 mChildren 添加和删除条目仅限于 ResizeChildren 方法。当组件需要添加或删除时,它们被添加到两个 vector 之一,mChildrenPendingAddition 和 mChildrenPendingRemoval。在 Update 循环之前,调用 ResizeChildren,并相应地更新 mChildren。 (如果这是处理这个特定问题的愚蠢方法,请阻止我。)
当我尝试从 mChildren 中删除所有也包含在 mChildrenPendingRemoval 中的条目时,我遇到了异常。来自 UILayout::ResizeChildren():
mChildren.erase(remove_if(mChildren.begin(), mChildren.end(),
IntersectsWithChildrenPendingRemoval(this)), mChildren.end());
IntersectsWithChildrenPendingRemoval 的比较函数调用 this->ChildrenPendingRemovalContains(HUILayout ly),它执行以下操作:
return (find(mChildrenPendingRemoval.begin(), mChildrenPendingRemoval.end(),
ly) != mChildrenPendingRemoval.end());
该行有时 无法通过调试断言vector iterators incompatible。关于这个错误有很多现有的问题,但它似乎通常表明正在比较来自不同容器的两个迭代器。但在这里,显然不是这样,对吧?还有什么可能导致此问题?
相关源码:
这是我为多线程应用程序开发的插件。事实上,问题以非常罕见和随机的间隔出现,这让我相信这与插件在单独的线程中运行这一事实有关,但所有这些方法都是从一个函数调用的,完全是在一个单一的线程,并且 mChildren 不会在任何其他线程中访问或修改。
最佳答案
Please stop me if this is an asinine way of handling this particular problem
您为什么不制作该系列的拷贝,并立即将其交换:
std::list<X> copy(mChildren);
copy.insert(...);
copy.remove(...);
copy.insert(...);
// at once:
std::swap(copy, mChildren);
进一步的思考:
将迭代器在任何时间段内保存在可变容器中通常不是很方便
因为这是一个智能指针的容器...如果您需要保留 ',为什么不自己传递智能指针本身指向元素的指针? (当然,这不会启用迭代,但 IMO 无论如何都不是一个非常健康的愿望)
关于c++ - 比较来自一个 vector 的迭代器时,什么会引发 'iterators are incompatible'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8318338/
我有一个自定义类 Custom . public class Custom { private Long id; List ids; // getters and setters } 现在
我有一个 Tree 对象,其中包含 Tree 对象的子对象 (HashMap) 等等。 我需要通过 numericPosition 变量过滤对象。 例如: Tree mapTreeRoot = new
我是编码的新手,在尝试了多种解决方案后,我仍然无法弄清楚为什么我的做法是错误的。这是我的完整代码: public class Student { private String name; pr
我在使用泛型时遇到问题。我不知道如何将 OnCallbackWrapper 传递给 CallbackWrapper 过程。我在以下示例中收到“不兼容类型”错误: unit uTest; interfa
我想实现yin-yang puzzle在 haskell 。这是我的尝试(不成功): -- The data type in use is recursive, so we must have a n
这个问题已经有答案了: What does "Incompatible types: void cannot be converted to ..." mean? (1 个回答) 已关闭2 年前。 我
在以下情况下,我无法理解 Java 泛型的行为。 拥有一些参数化接口(interface),IFace ,以及某个类上的方法,该方法返回扩展此接口(interface)的类,> Class getCl
我成功地将我的日期从 JDateChooser 获取到带有以下行的字符串中: String d1 = ((JTextField)jDateChooser1.getDateEditor().getUi
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我正在编写这段使用大数字的代码: import java.math.*; import java.util.*; import java.lang.*; public class main {
我首先使用 JXL 修改 POI 创建的一个 xls 文件。之后我将尝试使用 POI 读取该文件。在 POIFSFileSystem 创建的那一刻 poFileSystem = new POIFSF
这里是完全的 Java 菜鸟。学校刚刚开学,我正在参加 APCS。我们的老师向我们展示了这个名为 Scanner 的很酷的类(class),但他还没有教过我们。我觉得这很酷,所以我决定进一步研究它。在
我见过很多情况,其中声明了一个字节,但来自类似方法的值intToByte 或 StringToByte 被转换为字节,因为程序员提供了一个十六进制-值,一个整数-或字符串值。 我试图将实际的字节值分配
在这个类中,我想返回整个数组列表,而不是作为单个元素。但是,我在编译时收到错误“不兼容类型”。我在这里做错了什么?感谢您的帮助!! import java.util.ArrayList; public
我想设置一个新的 mysql 数据库从属数据库,运行比主数据库 => 5.0.75 更新版本的 mysql => 5.1.41,据我所知,这通常应该没有问题。然而,事实证明设置复制失败了,因为我在 5
我相信conftest缺少正确的标志,但我无法通过查看mkmf.log的内容来找出问题,这些内容包含在下面。 任何想法将不胜感激! 我正在编译用于 OpenWRT 路由器 (mips) 使用 ruby
我正在尝试实现一个呼吸优先的搜索,用于搜索罗马尼亚城市的人工智能程序。 但是,我在这方面遇到了很多麻烦,最新的错误是 searches.java:153: error: incompatible ty
我有编译错误: Error: incompatible types: Object cannot be converted to String. 在行 String buf = it.next();
private byte[] decode_text(byte[] image) { int length = 0; int offset = 32; for(int i=0;
这个问题在这里已经有了答案: Why won't this generic java code compile? (4 个答案) 关闭 9 年前。 给定这个简单的类: import java
我是一名优秀的程序员,十分优秀!