Не могу скомпилировать учебник openGL (из ogled) в macOS - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь скомпилировать учебник 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;
    }
};

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...