我尝试使用 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>
但它不修复我的错误,我怎么能超载操作员?
答案 0 :(得分:0)
我发现问题我只需要在良好的命名空间中使用重载,在我的标题中我需要使用:
namespace glm {
bool operator <(const glm::vec2& l, const glm::vec2& r);
bool operator ==(const glm::vec2& l, const glm::vec2& r);
}
谢谢你的回答