2012-01-17 52 views
0

我SortedMerge函數聲明爲下:調用函數的結果存儲在「此」

sortedMerge(ListOfParts *& l2, ListOfParts *& result); 

在同一類的以下功能,我想用對象tmp1調用這個SortedMerge()函數在調用mergeSort函數的對象中得到結果;即,this。 基本上,main()中的對象l1調用mergeSort()並從那裏獲得2列出tmp1,tmp2,現在我想調用SortedMErge將結果存儲在l1中;

真的卡住了。我認爲使用「this」就足夠了,但我認爲它與不使用ant CONST的函數參數有一些衝突,並且「this」會使其變爲CONST。

那麼可能會有另一種解決方法呢?

Class ListOfParts{ 

struct CarPart{ 

int data; 
CarPart *next; 

} 


CarPart *Head; 

public: 


    sortedMerge(ListOfParts *& l2, ListOfParts *& result); 

void mergeSort(){ 

    ListOfParts *tmp1; 
    ListOfParts *tmp2; 
    if(this->Head == NULL || this->Head->Next == NULL){ 

     return; 

    } 

    this->frontBackSplit(tmp1, tmp2); 

    tmp1->mergeSort(); 
    tmp2->mergeSort(); 


    tmp1->sortedMerge(tmp2, this) 
} 

} 
+0

提示:創建指針時,不會創建指針指向的對象。 – Benoit 2012-01-17 14:33:12

回答

0

變化sortedMerge按值取它的參數,而不是引用:

sortedMerge(ListOfParts * l2, ListOfParts * result); 

然後你就可以通過不可改變的指針如this

+0

非常感謝您的回覆。但是我想存儲已排序的列表n RESULT,爲此我必須通過Reference,對吧? – Roger 2012-01-17 14:38:41

+0

@Roger:你已經傳遞了一個指針;該函數可以修改它指向的列表,這就是你想要的。如果你想讓函數更新指針來引用一個新列表,你只需要傳遞指針的引用 - 你不需要這樣做,因爲mergeSort在將指針傳遞給' sortedMerge',無論如何你都無法做到,因爲你無法改變'this'指向的內容。 – 2012-01-17 14:51:38

+0

什麼是最佳選擇?按價值傳遞是唯一的? – Roger 2012-01-17 15:39:30