ошибка C4430, C2143 и C2244 для функции в моем классе шаблона

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

Вот относительная часть кода, который у меня есть:

// 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

Любая помощь с этим будет высоко ценится!

0

Решение

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 файл.

0

Другие решения

В своем заголовке вы используете <class elemType> а в cpp вы используете <class T>

В вашем cpp измените <class T> в <class elemType>, MyArray<T> в MyArray<elemType> и все будет хорошо.

0

По вопросам рекламы [email protected]