C++ 在模板类中重载二进制运算符不会';不允许访问私有数据成员
我很确定我只是在做一些愚蠢的事情,但就我个人而言,我无法理解 下面是原始代码C++ 在模板类中重载二进制运算符不会';不允许访问私有数据成员,c++,templates,overloading,C++,Templates,Overloading,我很确定我只是在做一些愚蠢的事情,但就我个人而言,我无法理解 下面是原始代码 #include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; template <class T> class set { public: void add(T newElement); void remov
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
template <class T> class set
{
public:
void add(T newElement);
void remove(T newElement);
bool contains(T aValue);
int size();
void print();
set<T> get();
friend set<T> operator-(const set<T>& set1, const set<T> set2){
}
friend set<T> operator&(const set<T>& set1, const set<T> set2){
}
friend set<T> operator|(const set<T>& set1, const set<T> set2){
}
private:
vector<T> setVec;
};
template <class T>
void set<T>::add(T newElement){
setVec.push_back(newElement);
}
template <class T>
void set<T>::remove(T newElement){
it = find(setVec.begin(), setVec.end(), newElement);
setVec.erase(it);
}
template <class T>
void set<T>::print(){
for (vector<T>::iterator it = setVec.begin(); it != setVec.end(); ++it){
cout << *it << endl;
}
if (setVec.empty()){
cout << "SET is empty." << endl;
}
cout << endl;
}
int main(){
set<int> s;
s.add(1);
s.add(2);
s.add(3);
s.print();
set<int> s3;
s3.add(6);
s3.add(5);
s3.add(3);
set<int> s4 = s | s3;
s4.print();
set<string> s2;
s2.add("a");
s2.add("b");
s2.add("c");
s2.print();
system("PAUSE");
return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
模板类集
{
公众:
无效添加(T新元素);
空洞消除(T新元素);
布尔包含(T aValue);
int size();
作废打印();
set get();
友元集运算符-(常数集&set1,常数集set2){
}
友元集运算符&(常数集&set1,常数集set2){
}
友元集运算符|(常数集&set1,常数集set2){
}
私人:
向量setVec;
};
模板
void set::add(T新元素){
setVec.push_back(新元素);
}
模板
无效集::删除(T新元素){
it=find(setVec.begin(),setVec.end(),newElement);
设置向量擦除(它);
}
模板
空集::打印(){
for(vector::iterator it=setVec.begin();it!=setVec.end();++it){
不能您的操作符标记为friend
外观良好,工作正常:
friend set<T> operator|(const set<T>& set1, const set<T> set2){
cout << set1.setVec.at(0) << " " << set2.setVec.at(0) << endl; // I am accessing private variable setVec here
set<T> ss; // Some new set to return
return ss;
}
友元集运算符|(常数集&set1,常数集set2){
它对我来说是否编译得很好(除了一些应该返回任何内容的方法之外)。它编译得很好。但是,如果我尝试使用set1.setVec,我可以读取它的私有成员。我需要它,这样我就可以实现运算符。你从哪里调用它?谢谢。我是个傻瓜。我只是在visual studio中通过快捷方式。我真的应该检查它。祝你度过漫长的一天,再次感谢。