Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 重载运算符时出错<;在sf::Vector中_C++_Templates_Overloading_Sfml - Fatal编程技术网

C++ 重载运算符时出错<;在sf::Vector中

C++ 重载运算符时出错<;在sf::Vector中,c++,templates,overloading,sfml,C++,Templates,Overloading,Sfml,我想将std::map与sf::Vector2i类一起使用,但出于某种原因,我需要重载

我想将
std::map
sf::Vector2i
类一起使用,但出于某种原因,我需要
重载
。由于地图将表示一个
3x3
网格,因此我提出了以下方法来对向量进行排序:

inline bool operator <(sf::Vector2i l, sf::Vector2i r)
{
    if (l.x * 3 + l.y < r.x * 3 + r.y) return 1;
    return 0;
}
inline bool操作符让我们从以下内容开始:

我想将
std::map
sf::Vector2i
类一起使用,但出于某种原因,我需要重载
让我们从以下内容开始:


我想将
std::map
sf::Vector2i
类一起使用,但由于某些原因,我需要重载
,实际上,您的运算符不接受常量Vector2i。常数很重要

实际上,运算符不接受常量向量2i。常数很重要

是否在标题中声明?除了immibis之外:运算符的定义在使用时必须是“可见”的。通常的方法是:在需要的函数上面定义它,或者在头文件中定义它,该头文件是
#在需要它的文件中包含
d。它是在头文件中声明的吗?除了immibis之外:操作符的定义在使用它的地方必须是“可见的”。通常的方法是:将它定义到您需要的函数上面,或者在头文件中定义它,该头文件是
#在您需要它的文件中包含
d。在这种情况下为什么必须使用const a?对不起,不是。我错过了您的编辑,它在
sf
名称空间中工作。我同意@JaMiT的观点,这可能是一个名称查找问题。通常,作为类接口“一部分”的自由函数、运算符或其他函数应在同一命名空间中声明。ADL将完成剩下的工作。通过声明operator<您正在扩展Vector2i的接口,并且应该将它放在同一名称空间中。
const
如果参数是通过引用而不是值传递的,则非常重要。(这个答案也是我最初的想法之一。)说到这一点,通过常量引用而不是值传递将是一个好主意,@John@JaMiT是的,这就是为什么我首先发布了答案。我看描述太快了。不过,我还是投票赞成你的答案。我想它涵盖了要点。我希望我没有给人错误的印象。“我不是在向你解释,@ravnsgaard,而是在向随机阅读这些评论的人解释。”为什么在这种情况下必须使用常数?对不起,不是。我错过了您的编辑,它在
sf
名称空间中工作。我同意@JaMiT的观点,这可能是一个名称查找问题。通常,作为类接口“一部分”的自由函数、运算符或其他函数应在同一命名空间中声明。ADL将完成剩下的工作。通过声明operator<您正在扩展Vector2i的接口,并且应该将它放在同一名称空间中。
const
如果参数是通过引用而不是值传递的,则非常重要。(这个答案也是我最初的想法之一。)说到这一点,通过常量引用而不是值传递将是一个好主意,@John@JaMiT是的,这就是为什么我首先发布了答案。我看描述太快了。不过,我还是投票赞成你的答案。我想它涵盖了要点。我希望我没有给人错误的印象。“我不是在向你解释,@ravnsgaard,而是在向随机阅读这些评论的人解释。”