函数的多重定义(在派生类中)

时间:2017-07-23 19:28:35

标签: c++ inheritance

我收到了错误""的多重定义。我一直在寻找不好的包容,但我没有看到任何错误。

我的代码汇总:

  • 一个VectorDictionnary类,派生自AbstractDictionnary
  • VectorDictionnary有一个.cpp和.hpp
  • AbstractDictionnary只有.hpp
  • 包含" VectorDictionnary.hpp"
  • 的main.cpp
  • 我编译:
  

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);
}

感谢您阅读

0 个答案:

没有答案