6
4

2 回答 2

9

你的函数:display并且area应该这样写:

    template <>
    double operations<Rectangle>::area( Rectangle const& rect )
    {
            double width =  get<0>(rect);
            double height = get<1>(rect);

            return width * height;
    }
  • 至于模板专门的函数,template <>应该放在函数的头部。
  • 对于静态成员函数,static不应出现在函数的定义体中。
于 2013-05-11T03:00:27.817 回答
1
template< typename P > // P is declared here
struct operations  {
    ... // into this scope
}; // but it goes out of scope here

template< typename P > // So it needs to be redeclared
void operations::display( Rectangle const &, std::ostream &) {
    ... // for this scope.
}

该函数display不“拥有”其参数的名称。模板参数必须在定义中重新声明。编译器消息指的是template<>建议您将某些内容放在<>括号内的语法,但令人困惑的是,将括号留空并且字面template<>意思是其他意思-显式专业化,这不是您想要的。

另一方面,是定义中提及static的成员函数的属性。在使用定义签名的其他部分将其与声明签名匹配后,编译器会记住。因此,您应该从定义中删除。staticstatic

于 2013-05-11T03:43:16.197 回答