【发布时间】:2016-01-27 18:29:10
【问题描述】:
我的项目的一个头文件(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_
它在 GNU/Linux 系统上编译并与 GCC 配合得非常好。
现在我尝试在 Windows 10 上使用 Visual Studio 14.0 编译它,但在 min 函数定义行出现大量错误,如下所示:
错误 C2146 语法错误:标识符前缺少 ')' 'a' slim3d-core C:\Users\msi\Desktop\SLIM3D\inc\slim\maths\lib.hpp 23
错误 C2433 'T': 不允许在数据上使用'inline' 声明 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 文件中,而不是直接添加到解决方案中,因此应该没有区别。
【问题讨论】:
-
只是一个想法 - 如果您只使用
cl /E进行预处理,您会看到inline T min(T a, T b);行的什么输出?我问是因为如果某些标题有#define min(a, b),它可能会干扰您的版本。 -
类似的问题,虽然是关于尝试使用
std::min,但有一个有用的答案提到NOMINMAXhere
标签: c++ visual-studio-2015 windows-10 file-extension