Я получаю ошибку повторного определения в файле cpp, может кто-нибудь сказать, как это исправить? - PullRequest
0 голосов
/ 06 августа 2020
#ifndef SORTEDTYPE_H_INCLUDED
#define SORTEDTYPE_H_INCLUDED

const int MAX_ITEMS = 5;

template <class T>
class SortedType
{
 public :
   SortedType();
   void MakeEmpty();
   bool IsFull();
   int  LengthIs();
   void InsertItem(T);
   void DeleteItem(T);
   void RetrieveItem(T&, bool&);
   void ResetList();
   void GetNextItem(T&);

 private:
  int length;
  T info[MAX_ITEMS];
  int currentPos;
};
#endif // SORTEDTYPE_H_INCLUDED



#include "sortedtype.h"

template <class T>
SortedType<T>::SortedType()
{
 length = 0;
 currentPos = - 1;
}

template <class T>
void SortedType<T>::MakeEmpty()
{
 length = 0;
}

template <class T>
bool SortedType<T>::IsFull()
{
 return (length == MAX_ITEMS);
}

template <class T>
int SortedType<T>::LengthIs()
{
 return length;
}

template <class T>
void SortedType<T>::InsertItem(T item)
{
    int location = 0;
    for(int i= 0; i<length; i++)
    {
        if(info[location]<item)
            location++;
    else
        break;
    }
    for(int i=length; i>location;i--)
    {
        info[i]=info[i-1];
    }
    info[location]= item;
    length++;
}
template <class T>
void SortedType<T>::DeleteItem(T item)
{
    int location=0;
    for(int i=0; i<length; i++)
    {
        if(info[i] == item)
            break;
        location++;
    }
    for(int i=location; i<length; i++)
    {
        info[i] = info[i+1];
    }
    length--;
}

template <class T>
void SortedType<T>::RetrieveItem(T& item, bool &found)
{
    int first=0, last=length-1, mid;
    while(first<=last)
    {
        mid=(first+last)/2;
        if(info[mid]== item)
        {
            found=true;
            return;
        }
        if(info[mid]<item)
        {
            first=mid+1;
        }
        else
        {
            last=mid-1;
        }
    }
    found=false;
}

template <class T>
void SortedType<T>::ResetList()
{
 currentPos = - 1;
}

template <class T>
void SortedType<T>::GetNextItem(T& item)
{
 currentPos++;
 item = info [currentPos];
}

Я получаю ошибку переопределения в файле cpp. Кто-нибудь может сказать, как это исправить? Я перепробовал все возможное. Я не понимаю, какую ошибку совершил. После создания он просто говорит «ошибка: переопределение 'SortedType :: SortedType ()» и то же самое для всех других функций. Что может убрать эту ошибку? Какие изменения можно сделать, чтобы это исправить. Я разместил написанный мной код.

1 Ответ

0 голосов
/ 06 августа 2020

Функции, которые определены в заголовке, должны быть inline, в противном случае вы получите ошибку переопределения, если они используются в нескольких единицах перевода.

Если вы определяете функцию-член в теле класса тогда функция-член неявно помечается inline. Если вы определяете его вне тела класса, как в вашем примере, вам нужно явно отметить его inline, добавив перед ним ключевое слово inline.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...