当前位置:网站首页>About the error of SFML Rect.inl file
About the error of SFML Rect.inl file
2022-07-30 21:06:00 【Zoe_Cpp】
首先因为VC++的max和min宏导致max和minA conflict occurred between the parameter templates of
所以要在前面加上#undef max 和 #undef min取消宏定义
然后Rect模板在sf命名空间下,but the file is notRect前加上sf::
修改后的文件如下
版本SFML 2.5.1
//
// SFML - Simple and Fast Multimedia Library
// Copyright (C) 2007-2018 Laurent Gomila ([email protected])
//
// This software is provided 'as-is', without any express or implied warranty.
// In no event will the authors be held liable for any damages arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it freely,
// subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented;
// you must not claim that you wrote the original software.
// If you use this software in a product, an acknowledgment
// in the product documentation would be appreciated but is not required.
//
// 2. Altered source versions must be plainly marked as such,
// and must not be misrepresented as being the original software.
//
// 3. This notice may not be removed or altered from any source distribution.
//
#undef min
#undef max
template <typename T>
sf::Rect<T>::Rect() :
left (0),
top (0),
width (0),
height(0)
{
}
template <typename T>
sf::Rect<T>::Rect(T rectLeft, T rectTop, T rectWidth, T rectHeight) :
left (rectLeft),
top (rectTop),
width (rectWidth),
height(rectHeight)
{
}
template <typename T>
sf::Rect<T>::Rect(const sf::Vector2<T>& position, const sf::Vector2<T>& size) :
left (position.x),
top (position.y),
width (size.x),
height(size.y)
{
}
template <typename T>
template <typename U>
sf::Rect<T>::Rect(const sf::Rect<U>& rectangle) :
left (static_cast<T>(rectangle.left)),
top (static_cast<T>(rectangle.top)),
width (static_cast<T>(rectangle.width)),
height(static_cast<T>(rectangle.height))
{
}
template <typename T>
bool sf::Rect<T>::contains(T x, T y) const
{
// Rectangles with negative dimensions are allowed, so we must handle them correctly
// Compute the real min and max of the rectangle on both axes
T minX = std::min(left, static_cast<T>(left + width));
T maxX = std::max(left, static_cast<T>(left + width));
T minY = std::min(top, static_cast<T>(top + height));
T maxY = std::max(top, static_cast<T>(top + height));
return (x >= minX) && (x < maxX) && (y >= minY) && (y < maxY);
}
template <typename T>
bool sf::Rect<T>::contains(const sf::Vector2<T>& point) const
{
return contains(point.x, point.y);
}
template <typename T>
bool sf::Rect<T>::intersects(const sf::Rect<T>& rectangle) const
{
Rect<T> intersection;
return intersects(rectangle, intersection);
}
template <typename T>
bool sf::Rect<T>::intersects(const sf::Rect<T>& rectangle, sf::Rect<T>& intersection) const
{
// Rectangles with negative dimensions are allowed, so we must handle them correctly
// Compute the min and max of the first rectangle on both axes
T r1MinX = std::min(left, static_cast<T>(left + width));
T r1MaxX = std::max(left, static_cast<T>(left + width));
T r1MinY = std::min(top, static_cast<T>(top + height));
T r1MaxY = std::max(top, static_cast<T>(top + height));
// Compute the min and max of the second rectangle on both axes
T r2MinX = std::min(rectangle.left, static_cast<T>(rectangle.left + rectangle.width));
T r2MaxX = std::max(rectangle.left, static_cast<T>(rectangle.left + rectangle.width));
T r2MinY = std::min(rectangle.top, static_cast<T>(rectangle.top + rectangle.height));
T r2MaxY = std::max(rectangle.top, static_cast<T>(rectangle.top + rectangle.height));
// Compute the intersection boundaries
T interLeft = std::max(r1MinX, r2MinX);
T interTop = std::max(r1MinY, r2MinY);
T interRight = std::min(r1MaxX, r2MaxX);
T interBottom = std::min(r1MaxY, r2MaxY);
// If the intersection is valid (positive non zero area), then there is an intersection
if ((interLeft < interRight) && (interTop < interBottom))
{
intersection = Rect<T>(interLeft, interTop, interRight - interLeft, interBottom - interTop);
return true;
}
else
{
intersection = Rect<T>(0, 0, 0, 0);
return false;
}
}
template <typename T>
inline bool operator ==(const sf::Rect<T>& left, const sf::Rect<T>& right)
{
return (left.left == right.left) && (left.width == right.width) &&
(left.top == right.top) && (left.height == right.height);
}
template <typename T>
inline bool operator !=(const sf::Rect<T>& left, const sf::Rect<T>& right)
{
return !(left == right);
}
边栏推荐
猜你喜欢
Use the map function to operate on each element in the list It seems that you don't need a map
Automatically generate test modules using JUnit4 and JUnitGenerator V2.0 in IDEA
MySQL 视图(详解)
【深度学习】对迁移学习中域适应的理解和3种技术的介绍
Cookie中的JSESSIONID说明
nVisual网络可视化管理平台功能和价值点
Oblique document scanning and character recognition (opencv, coordinate transformation analysis)
KingbaseES TOAST存储方式
啊?现在初级测试招聘都要求会自动化了?
MySQL----多表查询
随机推荐
多线程获取官方汇率
c语言:操作符详解
2022-07-29 mysql/stonedb慢SQL-Q17-分析
2021年PHP-Laravel面试题问卷题 答案记录
HJ85 最长回文子串
C语言中指针没那么难~(2)【文章结尾有资料】
三层架构简单配置
GPGGA NTRIP RTCM Notes
深入浅出边缘云 | 3. 资源配置
Redis数据更新,是先更新数据库还是先更新缓存?
KingbaseESV8R6 snapshot too old的配置和测试
为什么那么多自学软件测试的人,后来都放弃了...
5分钟搞懂MySQL - 行转列
C language: detailed explanation of operators
Android studio连接MySQL并完成简单的登录注册功能
【深度学习】对迁移学习中域适应的理解和3种技术的介绍
Motion Tuned Spatio-temporal Quality Assessmentof Natural Videos
关于SFML Rect.inl文件报错的问题
MYSQL 唯一约束
化二次型为标准型