我的模板类中的函数的错误C4430,C2143和C2244

时间:2012-11-11 02:10:19

标签: c++ templates function-declaration

我正在尝试创建一个采用模板化类型的函数并将其添加到列表/数组的末尾,并且我遇到了一个我似乎无法找到解决方法的错误。我是模板的新手,所以我不确定这是否是我使用模板或其他东西的问题。

以下是我所拥有的代码的相对部分:

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

非常感谢任何帮助!

2 个答案:

答案 0 :(得分: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文件中。

答案 1 :(得分:0)

在标题中,您使用<class elemType>并在cpp中使用<class T>

在您的cpp中,将<class T>更改为<class elemType>,将MyArray<T>更改为MyArray<elemType>,一切都会正常。