我在Android库中包含CGAL标头,但出现此错误。我没有使用CGAL :: Epick我自己,这是在CGAL中模板化的类型。这似乎不是特定于CGAL的问题,但可能是Android C ++专家可以帮助我的工具链/ libc ++问题。请发表评论。
Value SD
Symbol Date
ABC 19APR2017 35.43 0.00
20APR2017 28.41 4.96
21APR2017 33.8 3.67
DEF 19APR2017 10 0.00
20APR2017 15 3.54
21APR2017 12 2.52
答案 0 :(得分:0)
我找到了解决问题的办法。实际上,编译器正在寻找每个代码库都不存在的CGAL :: Epick比较运算符,其中CGAL内核被隐式添加到stl结构中,例如向量和地图。通过不正确的副本而不是引用来迭代C ++ 11样式的结构:
//not
for (auto: vectorOfStructsContainingEpickSets)
//but
for (auto&:vectorOfStructsContainingEpickSets)
结果是深度复制了这些结构,当您深度复制包含std :: set的结构(其中对象本身是键)时,将调用不等式运算符,即对epick进行比较。以这种方式存储了史诗的不同衍生物。
是的,这个问题的答案最终是,甚至不应该对CGAL内核进行比较,甚至是隐式的。
仍然未知的是,为什么gcc-5 x86_64 linux编译的代码库没有抱怨clang android x86_64工具链交叉编译中发生了epick错误。