Я пытаюсь сделать функцию, которая принимает шаблонный тип и добавляет его в конец списка / массива, и я сталкиваюсь с ошибкой, которая, кажется, не может найти способ обойти. Я новичок в шаблонах, поэтому я не уверен, что это проблема с тем, как я использую шаблоны или что-то еще.
Вот относительная часть кода, который у меня есть:
// MyArray.h
// insure that this header file is not included more than once
#pragma once
#ifndef MYARRAY_H_
#define MYARRAY_H_
template <class elemType>
class MyArray
{
private:
int _size; // number of elements the current instance is holding
int _capacity; // number of elements the current instance can hold
int _top; // Location of the top element (-1 means empty)
elemType * list; // ptr to the first element in the array
public:
// Ctors
MyArray(); // default
MyArray(int capacity); // initialize to capacity
MyArray( MyArray & original); // copy constructor
// Dtor
~MyArray();
// METHODS
// Add
// Takes an argument of the templated type and
// adds it to the end of the list/array
void Add(const elemType & elem);
};
// =============================================================================
/* ... */
// METHODS
// Add
// Takes an argument of the templated type and
// adds it to the end of the list/array
template <class T>
void MyArray<T>::Add(const elemType & elem) // error C4430 and C2143
{
list[ _size + 1 ] = elem; // Place item on the bottom of the stack
} // error C2244#endif
И я получаю эти ошибки:
Error 1 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\...\myarray.h 80 1 Testing_Grounds
Error 2 error C2143: syntax error : missing ',' before '&' c:\...\myarray.h 80 1 Testing_Grounds
Error 3 error C2244: 'MyArray<elemType>::Add' : unable to match function definition to an existing declaration c:\...\myarray.h 83 1 Testing_Grounds
Любая помощь с этим будет высоко ценится!
template <class T>
void MyArray<T>::Add(const elemType & elem) // error C4430 and C2143
{
//...
}
Вот что elemType
(в параметре функции)? Так должно быть T
, Или же T
должно быть elemType
,
template <class T>
void MyArray<T>::Add(const T & elem) //fixed!
{
//...
}
Обратите внимание, что определение членов шаблона класса должно быть в самом заголовочном файле, а не в .cpp
файл.
В своем заголовке вы используете <class elemType>
а в cpp вы используете <class T>
В вашем cpp измените <class T>
в <class elemType>
, MyArray<T>
в MyArray<elemType>
и все будет хорошо.