首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >'numeric_limits‘不是模板

'numeric_limits‘不是模板
EN

Stack Overflow用户
提问于 2013-08-15 18:22:06
回答 3查看 1.6K关注 0票数 1

我有个错误

代码语言:javascript
复制
limits:30:29: error: 'numeric_limits' is not a template

在文件中,它重载特定类的std::numeric_limits:

代码语言:javascript
复制
  // file "limits"
#include <limits>

namespace std
{
template<typename T> struct numeric_limits<XX::YY<T> > : public 
                            numeric_limits<typename XX::YY<T>::ZZ>
{
private:
<...>

有什么问题吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-16 16:49:10

  1. numeric_limits并不试图继承自己。
  2. 该文件可以命名为“限制”,直到它不在包含路径中。

问题是,“限制”在包括路径中。所以它试图包括自己,而不是性病限制。结果,在文件开始时没有声明numeric_limits。

我将目录排除在包含路径之外,一切都很正常。

票数 0
EN

Stack Overflow用户

发布于 2013-08-15 18:39:24

您正在尝试创建一个从std::numeric_limits继承的std::numeric_limits --但是当您到达public numeric_limits...部件时,您已经声明了已经命名为numeric_limits的自己的模板(这个模板仍然不完整),所以它试图从自身继承而不是现有的std::numeric_limits

std::numeric_limits并不打算作为基类,也不提供任何虚拟函数,因此从它继承是没有用的。要使numeric_limits正确处理特定的类,需要为该类型定义numeric_limits的专门化:

代码语言:javascript
复制
#include <limits> // get base template definition + standard specializations

namespace std { 

template<>        // define your specialization
class numeric_limits<MyType> {
// ...
};

}

请注意,这是允许您向std命名空间添加某些内容的唯一情况之一--在用户定义的类型上添加现有模板的新专门化。

票数 3
EN

Stack Overflow用户

发布于 2013-08-15 18:27:23

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

就我个人而言,我会将这个定义与XX::YY放在同一个头文件中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18259129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档