2013-03-15 57 views
1

我意識到這可能是一個太侷限的問題,但我是指針的新手,如果我做錯了什麼,這可能會幫助別人。方法返回相同的指針地址?

對於一個項目,我們正在創建一個OrdListClass,它源於我的教授創建的ListClass對象。 ListClass是一個目標文件,所以我沒有它的來源。

到目前爲止,我一直在做這個項目,但是我在處理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 == 

Pointer addresses - as viewed in the watch window in Visual Studio 2010

+0

我們可以看到創建兩個對象並檢查相等性的代碼嗎? – JBentley 2013-03-15 21:20:16

回答

2

一種可能的解釋是,*thisrtOp是相同的對象。

另一個是他們是兩個不同的對象,但共享相同的列表指針(你似乎暗示這不應該是這樣,但不是說爲什麼)。

+0

以前在我的測試客戶端中,我使用了'yourList = myList'。在我的'Operator ='方法中,我不小心給了'yourList''myList'的列表指針。感謝您指出這一點(沒有雙關語意圖)。 – 2013-03-15 23:23:22

0

另一種選擇是你沒有源代碼的實現,它有一個靜態列表,所以它對所有的實例都是一樣的。這可能是您獲得兩個不同對象的相同地址的原因