【发布时间】:2012-10-07 23:37:21
【问题描述】:
我从 gcc 4.6 收到关于模板成员函数的真正奇怪的错误消息。这是一个最小的例子:
template<typename T>
class Pimpl
{
public:
Pimpl(const Pimpl&) {}
private:
T* clone_(const T*);
};
template<typename T>
template<typename P>
T*
Pimpl<T>::clone_(const T*)
{
return new P(static_cast<const P&>(*p));
}
这是错误:
$ c++ -c y.cpp
y.cpp:14:1: error: prototype for ‘T* Pimpl<T>::clone_(const T*)’ does not match any in class ‘Pimpl<T>’
y.cpp:8:8: error: candidate is: T* Pimpl<T>::clone_(const T*)
请注意,不匹配的原型与候选原型完全相同。
什么给了?
【问题讨论】:
-
不,不是。候选者不是成员模板。
-
那个“克隆”功能似乎根本没有任何意义。它更像是一个“转换和分配”功能。