Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.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++ Visual Studio中的最小和最大函数_C++_Visual Studio 2015_Windows 10_File Extension - Fatal编程技术网

C++ Visual Studio中的最小和最大函数

C++ Visual Studio中的最小和最大函数,c++,visual-studio-2015,windows-10,file-extension,C++,Visual Studio 2015,Windows 10,File Extension,我的项目的一个头文件(lib.hppfile)中有以下代码: #ifndef SLIM_MATHS_LIB_HPP_ # define SLIM_MATHS_LIB_HPP_ namespace slim { namespace maths { namespace lib { template <typename T> inline T min(T a, T b); // Many errors on this line (see below) // Other f

我的项目的一个头文件(
lib.hpp
file)中有以下代码:

#ifndef SLIM_MATHS_LIB_HPP_
# define SLIM_MATHS_LIB_HPP_

namespace slim
{
namespace maths
{

namespace lib
{
template <typename T>
inline T        min(T a, T b); // Many errors on this line (see below)
// Other functions
}
}
}

# include "lib.ipp" // Functions definitions are inside

#endif // !SLIM_MATHS_LIB_HPP_
\ifndef SLIM\u math\u LIB\u水电站_
#定义SLIM\u数学\u LIB\u水电站_
名称空间修长
{
名称空间数学
{
名称空间库
{
模板
内联T min(ta,tb);//此行有许多错误(见下文)
//其他职能
}
}
}
#包含“lib.ipp”//函数定义在
#endif/!斯利姆水电站_
它在GNU/Linux系统上与GCC编译并工作得非常好

现在我正试图在Windows 10上使用Visual Studio 14.0编译它,在
min
函数定义行上出现了大量错误,如下所示:

错误C2146语法错误:标识符前缺少“') “a”slim3d核心C:\Users\msi\Desktop\slim3d\inc\slim\math\lib.hpp 23
错误C2433“T”:“inline”不允许用于数据 声明slim3d核心C:\Users\msi\Desktop\slim3d\inc\slim\math\lib.hpp 23
错误C2365'T':重新定义;以前的定义是“模板” 参数'slim3d core C:\Users\msi\Desktop\slim3d\inc\slim\math\lib.hpp 23
错误C2061语法错误:标识符 “a”slim3d核心C:\Users\msi\Desktop\slim3d\inc\slim\math\lib.hpp 23
错误C2059语法错误: “)”slim3d核心C:\Users\msi\Desktop\slim3d\inc\slim\math\lib.hpp 23
错误C2146语法错误:标识符前缺少“') “b”slim3d核心C:\Users\msi\Desktop\slim3d\inc\slim\math\lib.hpp 23
错误C2146语法错误:缺少“;”前标识符 “b”slim3d核心C:\Users\msi\Desktop\slim3d\inc\slim\math\lib.hpp 23

我已经用Visual Studio 14.0在Windows 7系统上成功编译了它,但
lib.hpp
lib.ipp
分别命名为
lib.hh
lib.hpp
,因此我认为这是Windows 10的系统问题或扩展问题。

也许VisualStudio拒绝考虑<代码> .IPP<代码>文件的内容,因为C++代码在打开时不把它作为代码着色。但是,由于它是从
.hpp
文件中包含的,而不是直接添加到解决方案中,所以应该没有区别。

min
windows.h
中定义为宏。在声明函数之前,在标题中添加一行
#undef min

只是一个想法-如果只使用
cl/E
进行预处理,您会看到
内联T min(T a,T b)的输出是什么行?我这样问是因为如果某个标题有一个
#define min(a,b)
,它可能会干扰您的版本。类似的问题,尽管是关于尝试使用
std::min
,有一个有用的答案,提到<代码> NoMINMAX 这就是为什么宏是邪恶的。@ NeilKirk:更何以——为什么微软Visual C++是邪恶的:对于一个常用的报头来说,一个疯狂的宏定义…@ Tyyd它可能一路返回Windows 1天,然后取出它会破坏太多的现有代码,微软似乎想要避免的事情。他们可以使用
NOMINMAX
将其更改为opt-in(使用define)而不是opt-out。