我收到了错误""的多重定义。我一直在寻找不好的包容,但我没有看到任何错误。
我的代码汇总:
g ++ -std = c ++ 14 -Wall -Wextra main.cpp VectorDictionnary.hpp AbstractDictionnary.hpp VectorDictionnary.cpp
以下是编译器的内容:
g ++ -std = c ++ 14 -Wall -Wextra main.cpp AbstractDictionnary.hpp VectorDictionnary.hpp VectorDictionnary.cpp
/tmp/cccKJOw1.o:在函数
AbstractDictionnary::operator+=(AbstractDictionnary&)': VectorDictionnary.cpp:(.text+0x0): multiple definition of
AbstractDictionnary :: operator + =(AbstractDictionnary&)' /tmp/ccdwuuCz.o:main.cpp:(.text+0x0):这里首先定义 collect2:错误:ld返回1退出状态
这是我的代码:
的main.cpp
#include "VectorDictionnary.hpp"
int main()
{
return 0;
}
AbstractDictionnary.hpp
#ifndef ABSTRACTDICTIONNARY_HPP
#define ABSTRACTDICTIONNARY_HPP
#include <string>
#include <iostream>
class AbstractDictionnary {
public:
virtual void insert(const std::string&)=0;
virtual void erase(const std::string&)=0;
virtual bool search(const std::string&) const=0;
virtual void insert_to(AbstractDictionnary&)=0;
AbstractDictionnary& operator+=(AbstractDictionnary&);
virtual ~AbstractDictionnary();
};
inline AbstractDictionnary::~AbstractDictionnary() = default;
AbstractDictionnary& AbstractDictionnary::operator +=(AbstractDictionnary& right)
{
right.insert_to(*this);
return *this;
}
#endif // ABSTRACTDICTIONNARY_HPP
VectorDictionnary.hpp
#ifndef VECTORDICTIONNARY_HPP
#define VECTORDICTIONNARY_HPP
#include "AbstractDictionnary.hpp"
#include <vector>
class VectorDictionnary final : public AbstractDictionnary
{
public:
void insert(const std::string&) override;
void erase(const std::string&) override;
bool search(const std::string&) const override;
void insert_to(AbstractDictionnary&) override;
std::vector<std::string>::iterator begin();
std::vector<std::string>::iterator end();
std::size_t size() const;
void show() const;
~VectorDictionnary()=default;
private:
std::vector<std::string> _vector;
};
#endif //VECTORDICTIONNARY_HPP
VectorDictionnary.cpp
#include "VectorDictionnary.hpp"
void VectorDictionnary::insert(const std::string& s)
{
auto it = _vector.begin();
while(it != _vector.end() && *it < s) ++it;
if(it == _vector.end() || *it != s) _vector.insert(it, s);
}
void VectorDictionnary::erase(const std::string& s)
{
auto it = _vector.begin();
while(it != _vector.end() && *it != s) ++it;
if(it != _vector.end()) _vector.erase(it);
}
bool VectorDictionnary::search(const std::string& s) const
{
auto it = _vector.begin();
while(it != _vector.end() && *it < s) ++it;
if(it == _vector.end() || *it != s) return false;
return true;
}
std::size_t VectorDictionnary::size() const
{
return _vector.size();
}
void VectorDictionnary::show() const
{
for(auto it = _vector.begin(); it != _vector.end(); ++it)
{
std::cout << *it << " ";
}
endl(std::cout);
}
std::vector<std::string>::iterator VectorDictionnary::begin()
{
return _vector.begin();
}
std::vector<std::string>::iterator VectorDictionnary::end()
{
return _vector.end();
}
void VectorDictionnary::insert_to(AbstractDictionnary& ad)
{
for(auto it = begin(); it != end(); ++it) ad.insert(*it);
}
感谢您阅读