'numeric_limits'不是模板
'numeric_limits' is not a template
我有一个错误
limits:30:29: error: 'numeric_limits' is not a template
在文件中,它重载特定类的std::numeric_limits:
// file "limits"
#include <limits>
namespace std
{
template<typename T> struct numeric_limits<XX::YY<T> > : public
numeric_limits<typename XX::YY<T>::ZZ>
{
private:
<...>
什么可能是问题?
您正试图创建一个从std::numeric_limits
继承的std::numeric_limits
,但当您到达public numeric_limits...
部分时,您已经声明了自己的模板(仍然不完整),该模板已经命名为numeric_limits
,因此它正试图从自身继承,而不是从现有的std::numeric_limits
继承。
std::numeric_limits
不是一个基类,也不提供任何虚拟函数,所以从它继承无论如何都没有用。为了使numeric_limits
正确处理您的特定类,您需要为该类型定义numeric_limits的专门化:
#include <limits> // get base template definition + standard specializations
namespace std {
template<> // define your specialization
class numeric_limits<MyType> {
// ...
};
}
请注意,这是唯一允许向std
命名空间添加内容的情况之一——在用户定义的类型上添加现有模板的新专门化。
您的文件不应该像那样命名为limits
,因为它会阻止包含正常的系统头。我甚至不确定重新定义标题是否合法。
就我个人而言,我会把这个定义放在与XX::YY
相同的头文件中
-
numeric_limits不尝试继承自身。
-
该文件可以命名为"limits",直到它不在包含路径中为止。
问题是"限制"在include路径中。因此,它试图包括自己,而不是std限制。因此,在文件的开头根本没有声明numeric_limits。
我从include路径中排除了目录,一切都很好。
相关文章:
- <limits> 使用 VSC2019 编译旧代码时出错
- 为什么在main()之前断言会导致语法错误"error: expected ')' before numeric constant"?
- limits.h中未确认的值
- OpenCV make error: limits.h 没有这样的目录文件
- boost::icl::interval 和 boost::numeric::interval 是否有可用的适配层?
- 在没有 <limits.h> 或 <values.h> 的系统上查找SHRT_MAX
- 检测<T>某些非数字类型 T 的 std::numeric::type 的特化
- 是否有内置函数可用于boost :: numeric ::间隔
- 使用 boost::numeric::odeint 积分非线性函数 f'(x, y, z) = a + b*I
- 模板实例化与Armadillo和Boost :: Numeric :: Odeint
- typedef 一个向量和 boost::numeric::ublas::vector 的固定大小
- 如何在没有 #include 的情况下获得DBL_MIN <limits> C++
- 为什么Boost Numeric库通过使用调试或发布模式给出不同的结果
- 从另一个子向量或subsatrix创建boost :: numeric :: ublas vector
- 包含 boost::numeric::ublas::matrix 的类的运算符重载
- GMOCK 叮当讨厌的错误"/usr/include/limits.h:123:16: fatal error: 'limits.h' file not found"
- Visual Studio malloc limits
- 当我<limits>在 c++ 代码中包含或<limit.h>时有什么区别
- 与CUDA/OpenMP兼容的`boost::numeric::odeint::runge_kutta-X`模板参数
- Limits of BOOST_FUSION_ADAPT_STRUCT