非成员函数&#int; int find(const T&)'不能有cv-qualifier

时间:2016-10-01 01:35:04

标签: c++

我的函数原型如下所示:

// Purpose: finds an element in the ArrayList  

// Parameters: 'x' is value to be found in the ArrayList

// Returns: the position of the first occurrance of 'x' in the list, or -1  if 'x' is not found.

int find(const T& x) const;

它放在类ArrayList

template <typename T>
class ArrayList
{ 
  private:  
    int m_size;                          // current number of elements
    int m_max;                           // maximum capacity of array m_data
    T* m_data;                           // array to store the elements

    T m_errobj;                          // dummy object to return in case of error


  public:
    int find(const T& x) const;

我的定义是:

template <typename T>
int find(const T& x) const
{
  int i;
  while (m_data[i]!=x && m_data[i]!=NULL)
    i++;
  if (m_data[i]=x)
    return i;
  else
return (-1);
}

每当我编译时,我都会在标题中收到错误,并且在范围中未声明m_data的错误。我该如何解决这个问题?

编辑:我将定义更改为

 int ArrayList<T>:: find(const T& x) const

我收到了很多错误

int ArrayList:: find(const T& x) const

没有工作

1 个答案:

答案 0 :(得分:1)

必须在标头中定义模板。在你的情况下,你将它分成.h / .cpp。为了工作,您需要将其与类定义一起定义。像这样:

template <typename T>
class ArrayList
{ 
private:  
    int m_size;                          // current number of elements
    int m_max;                           // maximum capacity of array m_data
    T* m_data;                           // array to store the elements

    T m_errobj;                          // dummy object to return in case of error

public:
   int find(const T& x) const;
};

#include "x.hpp"

并在文件x.hpp

中定义它
template <typename T>
int ArrayList<T>::find(const T& x) const
{
   int i;
   while (m_data[i]!=x && m_data[i]!=NULL)
   i++;
   if (m_data[i]=x)
      return i;
   else
      return (-1);
}

请注意,这与您在唯一头文件中定义所有内容的效果相同