2015-06-28 10 views
-2

Мой код;ошибка: слишком много шаблонов-параметров-списков

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){ 

Что я сделал не так? шаблон правилен.

+0

что это такое дополнительное 'typename ' in 'template typename ' ...? – vsoftco

+0

Он автоматизирует преобразование типов – user4578093

+0

Я имел в виду синтаксис. Это похоже на опечатку, у вас есть 'typename ' вне шаблона decl., И нет зависимого типа, поэтому 'typename' не требуется. – vsoftco

ответ

1

использование

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

вместо

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

Компилятор первый принимает к сведению тот факт, оператор находится в свободном доступе и имеет два шаблона списки, а затем один, вместо того, чтобы отметить, что оператор недействителен. Затем он выводит несколько вводящую в заблуждение ошибку, что ваш шаблон является неисправным, а не обнаруживает, что функция не была указана как функция-член, как должно было быть.

+0

Надеюсь, это поможет нескольким людям. Я всегда копирую определения своего класса, а затем заменяю соответствующие поля, когда делаю много шаблонов кода, поэтому такие вещи скользят мною гораздо больше, чем хотелось бы. – user4578093

Смежные вопросы