我的项目的一个头文件(lib.hpp
文件)中有以下代码:
#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_
它与GCC在GNU / Linux系统上的编译和工作非常顺利。
现在我尝试在Windows 10上使用Visual Studio 14.0编译它,我在min
函数定义行上得到了大量错误,如下所示:
错误C2146语法错误:在标识符之前缺少')' 'a'slim3d-core C:\ Users \ msi \ Desktop \ SLIM3D \ inc \ slim \ maths \ lib.hpp 23
错误C2433'T':数据不允许'内联' 声明slim3d-core C:\ Users \ msi \ Desktop \ SLIM3D \ inc \ slim \ maths \ lib.hpp 23
错误C2365'T':重新定义;以前的定义是'模板 参数'slim3d-core C:\ Users \ msi \ Desktop \ SLIM3D \ inc \ slim \ maths \ lib.hpp 23
错误C2061语法错误:标识符 'a'slim3d-core C:\ Users \ msi \ Desktop \ SLIM3D \ inc \ slim \ maths \ lib.hpp 23
错误C2059语法错误: ')'slim3d-core C:\ Users \ msi \ Desktop \ SLIM3D \ inc \ slim \ maths \ lib.hpp 23
错误C2146语法错误:在标识符之前缺少')' 'b'slim3d-core C:\ Users \ msi \ Desktop \ SLIM3D \ inc \ slim \ maths \ lib.hpp 23
错误C2146语法错误:缺少';'在标识符之前 'b'slim3d-core C:\ Users \ msi \ Desktop \ SLIM3D \ inc \ slim \ maths \ lib.hpp 23
我已经在Windows 7系统上使用Visual Studio 14.0成功编译了它,但lib.hpp
和lib.ipp
分别命名为lib.hh
和lib.hpp
,所以我认为它是Windows 10中的系统问题或扩展问题
也许Visual Studio拒绝将.ipp
文件的内容视为C ++代码,因为当我打开它时它不会将其作为代码着色。但是,由于它包含在.hpp
文件中而未直接添加到解决方案中,因此应该没有区别。
答案 0 :(得分:2)
min
被定义为windows.h
中的一个宏。在声明您的功能之前,在标题中添加#undef min
行。