我是c ++编程的新手,我必须为老师发布Set实现。
我必须重载operator +作为我的类Set的非成员函数(应该是模板类)。
我得到的问题是错误(在编译时):opertor +(Set,const Set&)必须采用零或一个参数。
但是我的非成员函数不在我的类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&amp;)'必须采用零或一个参数
我已经对你的近似英语抱歉了,谢谢你的帮助:D
答案 0 :(得分:1)
您需要按如下方式定义非成员operator +
:
template <class T>
Set<T> operator+(const Set<T>& a, const Set<T>& b)
{
//implementation
}
在创建不必要的副本时,将第一个参数更改为const reference
。