C++在模板类的情况下重载运算符+

C++ Overloading operator+ in the case of a template class

本文关键字:情况下 重载 运算符 C++      更新时间:2023-10-16

我是c++编程的新手,我必须为老师发布Set实现。

我必须重载运算符+作为类Set(应该是一个模板类)的非成员函数。

我遇到的问题是(编译时)错误:oper+(Set,const Set&)必须取零或一个参数。

但是我的非成员函数不在类Set上,所以这个函数应该有两个参数。我真的很失望。。。

这是我的代码:

#ifndef GUARD_set_h
#define GUARD_set_h
#include <iostream>
#include <array>
#include <vector>
#include <set>
#include <string>
using namespace std;
template <class T>
class Set
{
public:
    Set() {}
    Set(const T arr[], size_t arr_sz)
    {
        std::set<T> m_set;
        for(size_t i = 0; i < arr_sz; ++i)
            m_set.insert(arr[i]);
    }
    Set(const std::vector<T>& vec)
    {
        for(size_t i = 0; i < vec.size(); ++i)
            m_set.insert(vec[i]);
    }
    Set(const std::set<T>& st)
    {
        m_set = st;
    }
    Set(const Set& set_to_copy)
    {
        m_set = set_to_copy.m_set;
    }
    Set& operator +=(const Set& st) // Addition Assignement operator
    {
        for (typename std::set<T>::iterator it = st.m_set.begin(); it != st.m_set.end(); ++it)
            m_set.insert(*it);
        return *this;
    }
    private:
    std::set<T> m_set;
};
    template <class T>
    Set<T> Set<T>::operator+(Set, const Set&) // Set Union
    {
    }
#endif

以下是错误:错误:"Set Set::operator+(Set,const Set&)"必须采用零或一个参数

我已经为我的大致英语向你道歉了,并感谢你的帮助:D

您需要定义非成员operator +如下:

template <class T>
Set<T> operator+(const Set<T>& a, const Set<T>& b)
{
//implementation
}

将第一个参数更改为const reference,因为您正在创建不必要的副本。

相关文章: