我的代码;

template<typename T, int N>
class ngon{
  point<T> vertices[N];
  ...
  template<typename O> ngon<T,N>& operator=(const ngon<O,N> otyp);
    // O stands for other, as in other type
  ...
};

...
template<typename T, int N> typename<typename O>
ngon<T,N>& operator=(const ngon<O,N> otyp){
  for (int i = 0; i < N; i++)
    vertices[i] = point<T>(otyp.vertices[i]);
  return this;
}

给出错误;
.\Libraries/.\Geometry\Polygon_D2.hpp:103:11: error: too many template-parameter-lists
ngon<T,N>& operator=(const ngon<O,N> otyp){

我做错了什么?模板是正确的。

最佳答案

采用

ngon<T,N> ngon<T,N>::operator=(const ngon<O,N> otyp){

代替
ngon<T,N> operator=(const ngon<O,N> otyp){

编译器首先会注意到该运算符位于公共(public) Realm ,并且具有两个模板列表而不是一个模板列表,而不是指出该运算符无效。然后,它输出一个有点误导性的错误,即您的模板错误,而不是检测到该函数未如应有的那样被列为成员函数。

08-16 11:38