2013-11-07 3 views
0

Итак, чтобы начать, это мой векторный класс, который я создаю, который в основном функционирует как стандартный вектор библиотеки. Теперь мы пытаемся создать шаблон класса.Использование шаблона класса требует списка аргументов

Я рассмотрел несколько примеров людей, борющихся с этой ошибкой, но я чувствую, что я объявляю, что моя функция просто прекрасна, поэтому я не вижу проблемы. Вот мои заявления,

template <typename T> 
class MyVector 
{ 
public: 
const MyVector& operator=(const MyVector&); 
... 
} 

Код реализации.

template <typename T> 
MyVector<T>::MyVector(const MyVector& b) 
{ 
//set the vcapacity/vsize equal to the object passed to setup for a new deep copy 
vcapacity = b.vcapacity; 
vsize = b.vsize; 

//allocate space for a new varray that is the copy 
varray = new T[vcapacity]; 

//copy the data into the new array 
for (int i = 0; i < vsize; i++) 
{ 
    this->varray[i] = b.varray[i]; 
} 
} 

Так что я в основном получаю 2 ошибки, которые, как я полагаю, имеют отношение к одной и той же вещи. Первый указывает на мою первую строку реализации после строки шаблона, в которой «использование шаблона класса требует списка аргументов», а второе указывает на конец заявляемого кода реализации «невозможно сопоставить определение функции с существующей декларацией».

Любые идеи?

+0

Пожалуйста, добавьте как фактические сообщения об ошибке __complete__, так и указанные линии. – Zeta

ответ

3

Ваш параметр конструктора отсутствует параметр шаблона в реализации:

template <typename T> 
MyVector<T>::MyVector(const MyVector<T>& b) 
//         ^^^ 
1
const MyVector& operator=(const MyVector&); 

должен быть

MyVector& operator=(const MyVector&); 

See Here for why

Для ошибок, в реализации использовать аргумент шаблона:

const MyVector<T>& 

(Кстати, вы знали, вы предоставили нам декларация operator= и реализация c конструктор opy? :-))

Во всяком случае, думать о нем, как это - в реализации есть на самом деле нет такого класса, какMyVector, есть только класс один раз добавляется аргумент шаблона.

+3

Неверный. «MyVector» в этом контексте - это то же самое, что и «MyVector ». – catscradle

+1

Пример минимального счетчика: 'template struct vec {const vec & operator = (const vec &) {return * this; }}; ', компилируется отлично. – Zeta

+2

Это не совсем так. Строка, которую вы указали, действительна. Ошибка в другом месте. Ошибочная строка должна быть изменена, как вы предлагаете, но не этой. –

0

является первой линией реализации только после последней строки определения класса шаблона и вы опускаете ; после закрытия } этого определения, как в коде, который вы опубликовали? Ошибка, которую обычно совершает (по мне), которая может вызывать сообщения об ошибках в следующем включенном файле, когда заголовочный файл заканчивается определением класса без окончания ;.

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