我有个错误
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:
<...>有什么问题吗?
发布于 2013-08-16 16:49:10
问题是,“限制”在包括路径中。所以它试图包括自己,而不是性病限制。结果,在文件开始时没有声明numeric_limits。
我将目录排除在包含路径之外,一切都很正常。
发布于 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的专门化:
#include <limits> // get base template definition + standard specializations
namespace std {
template<> // define your specialization
class numeric_limits<MyType> {
// ...
};
}请注意,这是允许您向std命名空间添加某些内容的唯一情况之一--在用户定义的类型上添加现有模板的新专门化。
发布于 2013-08-15 18:27:23
您的文件不应该那样命名为limits,因为它阻止了正常系统头文件的包含。我甚至不确定重新定义标题是否合法。
就我个人而言,我会将这个定义与XX::YY放在同一个头文件中。
https://stackoverflow.com/questions/18259129
复制相似问题