' numeric_limits'不是模板

时间:2013-08-15 18:22:06

标签: c++ std

我有错误

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:
<...>

什么可能是个问题?

3 个答案:

答案 0 :(得分:3)

您正在尝试创建一个继承自std::numeric_limits的{​​{1}} - 但是当您到达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> { // ... }; } 命名空间添加内容的唯一情况之一 - 在用户定义的类型上添加现有模板的新专业化。

答案 1 :(得分:2)

您的文件不应该被命名为limits,因为它会阻止包含正常的系统标头。那,我甚至不确定重新定义标题是否合法。

就个人而言,我会将此定义放在与XX::YY

相同的头文件中

答案 2 :(得分:0)

  1. numeric_limits不会尝试继承自己。

  2. 该文件可以命名为“limits”,直到它不在包含路径中。

  3. 问题是“限制”在包含路径中。所以它试图包括自己,而不是标准限制。结果,在文件的开头根本没有声明numeric_limits。

    我从include路径中排除了目录,一切正常。