C++ 在模板类的情况下重载 operator+

标签 c++ templates overloading

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

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

我遇到的问题是错误(在编译时):opertor+(Set, const Set&) must take 0 or one argument。

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

这是我的代码:

#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

最佳答案

您需要按如下方式定义您的非成员(member)operator +:

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

在创建不必要的拷贝时,将第一个参数更改为 const reference

关于C++ 在模板类的情况下重载 operator+,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20604087/

相关文章:

c++ - 我可以在 RCpp 中使用单例模式吗?

c++ - 基类构造函数的 using 声明

C++ OpenGL (freeglut)

c++ - 模板化运算符<<显式实例化和 header

html - Liferay 7 Freemarker 模板。 staticUtil 已评估为 NULL 或缺失 - 尝试获取 JournalArticle 的类别

c++ - undefined symbol : __gnat_rcheck_CE_Invalid_Data when linking ADA with C++

c++ - 带有运算符语法的错误消息,但不是带有函数语法的错误消息

java - 方法重载的基本概念是什么

c++ - 为所有字符串类型重载模板函数

c# - 方法定义不明确,但希望保持向后兼容性