C ++重新定义错误,为什么会出现此错误?

时间:2019-09-21 15:02:25

标签: c++ compiler-errors

我有一个重新定义的问题,但是我注意到我已经在.hpp文件中包括了.cpp文件,所以我的错误是再次在我的.cpp文件中包括了.hpp文件。 现在,我收到此错误,这与模板有关。 同样,在解决我的问题时,能否向我解释什么是模板类? cplusplus.com并不是那么描述。 谢谢。 :)

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

-----------------警告您现在正在实施--------------------------- < / p>

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

-------------警告您正在离开界面--------------------------- < / p>

//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 个答案:

答案 0 :(得分:2)

请勿将您的ArrayBag.cpp称为.cpp文件。模板实现放在头文件中,名称应反映出来。

如果要在单独的文件中实施(严格不需要),请将其命名为ipptpp。项目系统有些东西不会尝试自行编译。

然后将其包含在.hpp中,不要将.hpp包含在.ipp中。