Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在模板类中重载二进制运算符不会';不允许访问私有数据成员_C++_Templates_Overloading - Fatal编程技术网

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中通过快捷方式。我真的应该检查它。祝你度过漫长的一天,再次感谢。