Я пытаюсь скомпилировать учебник openGL 40 из ogldev.У меня были проблемы с подключением тонны библиотеки, но я наконец сделал это.Но теперь у меня есть очень подозрительная ошибка.
Один из исходных кодов включает в себя заголовок карты из stl:
#include <map>
Но мой компилятор говорит мне следующее:
In file included from mesh.cpp:21:
In file included from ./mesh.h:22:
In file included from /Library/Developer/CommandLineTools/usr/include/c++/v1/map:455:
/Library/Developer/CommandLineTools/usr/include/c++/v1/__tree:2614:14: error:
no matching function for call to object of type
'std::__1::__tree<std::__1::__value_type<Edge, Neighbors>,
std::__1::__map_value_compare<Edge, std::__1::__value_type<Edge,
Neighbors>, CompareEdges, true>,
std::__1::allocator<std::__1::__value_type<Edge, Neighbors> >
>::value_compare' (aka 'std::__1::__map_value_compare<Edge,
std::__1::__value_type<Edge, Neighbors>, CompareEdges, true>')
if (!value_comp()(__root->__value_, __v))
После небольшого поиска я обнаружил, что причиной этой проблемы может быть функция сравнения. Вот карта, объявленная в учебном файле mesh.h:
map<string,uint> m_BoneMapping; // maps a bone name to its index
std::map<Edge, Neighbors, CompareEdges> m_indexMap;
std::map<aiVector3D, uint, CompareVectors> m_posMap;
, а также CompareEdges и CompareVectors:
struct CompareEdges
{
bool operator()(const Edge& Edge1, const Edge& Edge2)
{
if (Edge1.a < Edge2.a) {
return true;
}
else if (Edge1.a == Edge2.a) {
return (Edge1.b < Edge2.b);
}
else {
return false;
}
}
};
struct CompareVectors
{
bool operator()(const aiVector3D& a, const aiVector3D& b)
{
if (a.x < b.x) {
return true;
}
else if (a.x == b.x) {
if (a.y < b.y) {
return true;
}
else if (a.y == b.y) {
if (a.z < b.z) {
return true;
}
}
}
return false;
}
};