Ошибка переопределения в C ++. Почему я получаю эту ошибку? - PullRequest
0 голосов
/ 21 сентября 2019

У меня была проблема с переопределением, но я заметил, что я уже включил файл .cpp в файл .hpp, поэтому моя ошибка заключалась в том, что я снова включил файл .hpp в мой файл .cpp. Теперь я получаю эту ошибку, что-то связанное с шаблонами.,Также, пока вы решаете мою проблему, можете ли вы объяснить мне, что делает класс шаблона?cplusplus.com не такой описательный.Спасибо.:)

//implementation
template<class T>
ArrayBag<T>::ArrayBag() : item_count_(0){}

------------- ВНИМАНИЕ, ВЫ СЕЙЧАС ВЫХОДИТЕ ОТ РЕАЛИЗАЦИИ ---------------------------

//interface
    #ifndef ARRAY_BAG_H
#define ARRAY_BAG_H
#include <vector>

template<class T>
class ArrayBag
{
    protected:
        static const int DEFAULT_CAPACITY = 200;
        T items_[DEFAULT_CAPACITY];
        int item_count_;
        int get_index_of_(const T& target) const;
    public:
        ArrayBag();
        int getCurrentSize() const;
        bool isEmpty() const;
        //adds a new element to the end, returns true if it was successfully been added
        bool add(const T& new_entry);
        bool remove(const T& an_entry);
        void clear();
        bool contains(const T& an_entry) const;
        int getFrequencyOf(const T& an_entry) const;
        std::vector<T> toVector() const;
        void display() const;
        //overloading operators for objects
        void operator+=(const ArrayBag<T>& a_bag);
        void operator-=(const ArrayBag<T>& a_bag);
        void operator/=(const ArrayBag<T>& a_bag);
};

#include "ArrayBag.cpp"
#endif

------------- ВНИМАНИЕ, ВЫ СЕЙЧАС УХОДИТЕ В ИНТЕРФЕЙС ---------------------------

//error
5 C:\Users\minahnoona\Desktop\ArrayBag.cpp expected constructor, destructor, or type conversion before '<' token 
5 C:\Users\minahnoona\Desktop\ArrayBag.cpp expected `;' before '<' token 

1 Ответ

2 голосов
/ 21 сентября 2019

Не называйте ваш ArrayBag.cpp файл .cpp.Реализации шаблона идут в заголовочных файлах, и имя должно отражать это.

Если вы хотите реализовать реализацию в отдельном файле (вам это не нужно), назовите его ipp или tpp.Что-то, что система проекта не будет пытаться компилировать самостоятельно.

Затем включите это из .hpp и не включайте .hpp из .ipp.

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