无效的模板编译

时间:2018-10-07 15:14:20

标签: android cgal toolchain libc++

我在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

1 个答案:

答案 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错误。