我的函数原型如下所示:
// 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
没有工作
答案 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);
}
请注意,这与您在唯一头文件中定义所有内容的效果相同