C++在模板类的情况下重载运算符+
C++ Overloading operator+ in the case of a template class
我是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
,因为您正在创建不必要的副本。
相关文章:
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 使用 bool 和 const char 重载的 C++ 函数会在没有警告的情况下产生歧义 (MSVC2012)
- 如何在没有算术运算符的情况下重载
- c++ 中的函数重载如何在没有钻石继承的情况下工作?
- 父类有 26 个构造函数重载.如何在不复制+粘贴 26 个重载的情况下将一个小任务附加到所有构造器?
- 为什么在重载区域函数时在波纹管代码的情况下会出现歧义
- 模板和unique_ptr继承情况下的重载解决方案
- 运算符重载如何工作,为什么在我的情况下不起作用?
- 如何在不与标准库运算符冲突的情况下为一组相关类重载运算符?
- 在存在新的初始值设定项序列的情况下,运算符重载解析如何工作
- 有没有办法在不重载<<运算符的情况下打印出 std::list 的内容?
- SFINAE:如果在没有参数的情况下调用,则重载不明确
- C++在模板类的情况下重载运算符+
- 如何在没有重复代码的情况下实现"const"和"non-const"重载?
- 如何在不重载赋值运算符的情况下运行此代码
- 如何在不解析的情况下将重载函数指针作为参数传递 (C++03)
- 为什么内存泄漏只发生在赋值运算符重载的情况下,而不是在复制构造函数中,以及复制和交换习惯用法如何解决它
- 如何在没有友元函数的情况下重载<<运算符
- 在什么情况下,运算符=应该用左值/右值重载而不是复制和交换来实现