1

これはあまりにもローカライズされた質問かもしれませんが、私はポインタに不慣れであり、これは私が何か間違ったことをしている場合に他の人を助けるかもしれません。

プロジェクトでは、教授が作成OrdListClassしたオブジェクトから派生したを作成しています。はオブジェクトファイルなので、ソースがありません。ListClassListClass

これまでのところ、私はこのプロジェクトで非常にうまくやっていますが、を扱うときにこの障害にぶつかりましたOperator==

myList == yourListはオペレーターを呼び出すために使用します。

私の論理は、現在適用しているオブジェクトと、それを比較しているオブジェクトの両方に対して、彼ListClassが提供したメソッドを使用することです。GetListPtr()rtOp

ただし、使用する場合

ItemType* currPosPtr = GetListPtr(); //this class' List Pointer

ItemType* rtOpPosPtr = rtOp.GetListPtr(); //rtOp object's list pointer

それらは同じポインタアドレスを返しますか?

これが私のせいなのか、それとも私が与えたオブジェクトファイルのエラーなのかはわかりません。

    bool OrdListClass::operator== (const OrdListClass& rtOp) const  
{
    ItemType* currPosPtr = GetListPtr(); //this class' List Pointer
    ItemType* rtOpPosPtr = rtOp.GetListPtr(); //rtOp object's list pointer

    if (GetLength() == rtOp.GetLength()){ //If the lengths are equal
        /*** DO KEY COMPARISONS HERE ***/
    }else{ //Lengths are unequal
        return false; //List can't contain the same items
    }//End lengths if

    return true; //All items were compared, all keys match
}//End Operator ==

ポインターアドレス-VisualStudio2010のウォッチウィンドウに表示されます

4

2 に答える 2

2

考えられる理由の1つは、*thisrtOpは同じオブジェクトであるということです。

もう1つは、それらが2つの異なるオブジェクトであるが、同じリストポインターを共有していることです(これは当てはまらないことを意味しているようですが、理由は述べていません)。

于 2013-03-15T21:19:22.973 に答える
0

もう1つのオプションは、ソースコードを持っていない実装で、静的リストがあるため、すべてのインスタンスで同じです。これが、2つの異なるオブジェクトに対して同じアドレスを取得している理由である可能性があります

于 2013-03-15T21:22:24.783 に答える