1

私はこのクラスを持っています:

class myClass{
    public:
        myClass(string label);
        ~myClass();
        string myget();
        void myset(string label);

        void myadd(class2 * edge);
    private:
        string label;
        vector<class2 *> myList;
};

タイプ myClass のオブジェクトの等価性をチェックする関数を書きたい:

 bool operator== (myClass& l,myClass& r)
{         

}

これらのオブジェクトの myList ベクトルをチェックするために、l と r をコピーし、コピーのベクトルをソートし、それらのコピーのソートされたベクトルが等しいかどうかをチェックしたいと考えました。しかし、l と r のコピーに失敗したと思います。これが私がそのために書いたものです:

myClass x = new myClass("s1");
myClass y = new myClass("s2");


x = l;
y = r;
sort(x.myList.begin(),x.myList.end());
sort(y.myList.begin(),y.myList.end())
if( x == y)
    return true;
    else
    return false;

このコードは次のエラーを返します: エラー: 'myClass*' から非スカラー型 'myClass' への変換が要求されました。

x および y ポインターを作成しようとしましたが、どちらも機能しませんでした。このコードを修正する方法を教えてください。

前もって感謝します。

4

3 に答える 3

5
myClass x = new myClass("s1"); - here is the problem

演算子newはポインターを返します。したがって、ポインターを保存するか、自動ストレージ (通常はスタックとして参照される) にコピーを作成するだけです。

myClass x = myClass("s1"); - should be so (stack)
myClass *x = new myClass("s1"); - or so (heap)
于 2013-05-15T09:13:16.367 に答える
4

x と y をポインターとして宣言するのを忘れていませんか?

myClass* x = new myClass("s1");
myClass* y = new myClass("s2");
于 2013-05-15T09:14:31.263 に答える
3

クラスの期間中だけクラスを「ライブ」にする必要があると仮定すると、次のことができます。

  myClass x("s1");

または

  myClass x = myClass("s1");

クラスへのポインターが必要な場合は、この関数が呼び出し元の関数に戻すことができるようにします。

  myClass *x = new myClass("s1");
于 2013-05-15T09:17:07.813 に答える