Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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++_Overloading_Operands - Fatal编程技术网

C++ 操作数不匹配<;过往物体

C++ 操作数不匹配<;过往物体,c++,overloading,operands,C++,Overloading,Operands,我有两个类,一个是Obj,当我计算集合的中值时,另一个应该做一些操作符重载 我还将运算符

我有两个类,一个是Obj,当我计算集合的中值时,另一个应该做一些操作符重载


我还将运算符<放在第二个类中,(其中我有一个2st类对象的向量,并尝试将对象传递给main以使用操作数。但它仍然无法与操作数匹配。请仔细阅读编译器错误。
“小于”运算符在类
ListaObj
中重载,而您尝试比较
obj1
obj2
,这是两个类型为
Obj
的对象,您为什么要尝试重载
运算符您应该定义
bool运算符也
int Mediana()
应该是
const
,因为您从const调用它。
template<typename T>
class Obj {
private:
    typedef vector <T> myins;
    myins insieme;

public:
    Obj() {}

    void Add(const T& o) {
        insieme.push_back(o);
    }

    void Remove() {
        insieme.pop_back();
    }

    int Mediana() {

        sort(insieme.begin(), insieme.end());

        typename myins::const_iterator iter;
        typename myins::const_iterator iter1;

        double mediana = 0, result = 0;
        int risultato = 0;

        if (insieme.size() % 2 != 0) {
            mediana = (insieme.size() + 1) ;
            mediana /= 2;
            result = round(mediana);
            iter = insieme.begin()+result-1;
            risultato = *iter;
        }
        else {
            mediana = round(insieme.size()/2) ;
            iter = insieme.begin()+mediana-1;
            double mediana1 = mediana +1;
            iter1 = insieme.begin()+mediana1-1;
            risultato = round (*iter+*iter1);
            risultato /= 2;
        }

        return (risultato);
    }
};
template<typename T>
class ListaObj {

private:
    vector<T> myobjs;

public:
    ListaObj() {}

    void AddObj(T& ob) {
        myobjs.push_back(ob);
    }

    inline T& GetObj( int i ) {
        return myobjs[i];
    }

    friend bool operator<(const T& o1, const T& o2) {
        if ( o1.Mediana() < o2.Mediana() ) return true;
        else
            return false;
    }
 };
int main() {

     Obj<int> o1;
     Obj<int> o2;
     ListaObj<Obj<int>> list;

     o1.Add(2);
     o1.Add(3);
     o1.Add(3);
     o1.Add(5);
     o1.Add(7);
     o1.Add(10);

     o2.Add(1);
     o2.Add(2);
     o2.Add(3);

     list.AddObj(o1);
     list.AddObj(o2);

     auto obj1 = list.GetObj(0);
     auto obj2 = list.GetObj(1);



     cout << "Mediana o1: "<<o1.Mediana() << endl;
     cout << "Mediana o2: "<<o2.Mediana() << endl;

    bool tr = obj1 < obj2;

    if (tr) {
        cout << "Mediana di o1 minore di o2";
    }
    else
        cout << "o2 minore di o1";


    return 0;
}