我在无法修复的非常简单的代码上遇到了一个非常奇怪的错误。
我定义了以下函数对象:
template<const size_t n> class L2Norm {
public:
double operator()(const Point<n>& p) {
/* computes the L2-norm of the point P ... */
}
double operator()(const Point<n>& p,
const Point<n>& q) {
return L2Norm<n>(p-q);
}
};
在这里,该类Point<n>
在之前已经很好地定义了将n
点的坐标存储在n
维空间中(使用所需的运算符,...)。
我希望p
使用Point<5> p
. L2Norm<5>(p)
但这给了我以下错误:
no matching function for call to ‘L2Norm<5ul>::L2Norm(Point<5ul>&)’
note: candidates are: L2Norm<n>::L2Norm() [with long unsigned int n = 5ul]
note: candidate expects 0 arguments, 1 provided
note: L2Norm<5ul>::L2Norm(const L2Norm<5ul>&)
note: no known conversion for argument 1 from ‘Point<5ul>’ to ‘const L2Norm<5ul>&’
我很确定我犯了一个非常愚蠢的错误,但我不知道在哪里!
PS作为一个附带问题,如果我只能说L2Norm(p)
并且编译器检测到模板参数会更好,p
但据我所知,这是不可能的。我对吗?