在地图中使用的glm重载运算符不起作用

时间:2018-04-24 19:12:00

标签: c++ std glm-math

我尝试使用 glm :: vec2 作为 std :: map 中的键,但我有这个错误:

  

严重级代码描述项目文件行抑制状态   错误C2678二进制'<':找不到运算符,它接受类型'const glm :: vec2'的左手操作数(或者没有可接受的转换)VoxelEngine C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ VC \ include \ xstddef 239

在谷歌搜索后我发现我需要重载操作符,我尝试使用:

bool operator<(const glm::vec2& lhs, const glm::vec2& rhs)
{
    return lhs.x + lhs.y < rhs.x + rhs.y;
}

那是我的tools.h

#pragma once
#include <gl/glew.h>
#include <SFML/Window.hpp>
#include <SFML/OpenGL.hpp>

#include <string>
#include <fstream>
#include <iostream>
#include <math.h>


#include <..\glm/glm.hpp>
#include <..\glm/vec4.hpp>
#include <..\glm/mat4x4.hpp>
#include <..\glm/trigonometric.hpp>
// Include GLM extensions
#include <..\glm/gtc/matrix_transform.hpp>
#include <..\glm/gtc/type_ptr.hpp>
#include <..\glm/gtc/matrix_transform.hpp>
using namespace glm;
using namespace std;
bool operator<(const glm::vec2& lhs, const glm::vec2& rhs);
#include <map>

但它不修复我的错误,我怎么能超载操作员?

1 个答案:

答案 0 :(得分:0)

我发现问题我只需要在良好的命名空间中使用重载,在我的标题中我需要使用:

namespace glm {
    bool operator <(const glm::vec2& l, const glm::vec2& r);
    bool operator ==(const glm::vec2& l, const glm::vec2& r);
}

谢谢你的回答