2013-04-09 165 views
2

我有以下實際工作來完成學習C++,我一直花費很長時間尋找答案並閱讀我的所有工作,但我有點困惑,我可以澄清我在哪裏我錯在這裏。代碼如下所示:指針混淆C++

SafeArray& SafeArray::operator =(const SafeArray& other) { 
//Add code here 
return *this; 
} 

我們必須實現將一個數組分配給另一個數組的代碼。現在,如果我正確理解該代碼,該方法需要一個名爲其他的常量「SafeArray」的形式參數。 SafeArray之後的&意味着實際的數組本身被傳遞,而不是一個副本,而const意味着它不能被改變。同樣,該方法返回實際的數組本身,而不是它的副本。

因此,我想認爲這將是一個簡單的情況下創建一個指針,引用「其他」的內存位置,然後返回去引用的結果。在我試圖實際編寫這個想法時,我沒有運氣。

我試圖做類似下面的東西:

SafeArray* ptr = &other; //This should have created a SafeArray pointer to the memory location of the array "other". 

這裏的問題是,我得到的錯誤:

main.cpp:31:23: error: invalid conversion from ‘const SafeArray*’ to ‘SafeArray*’ [-fpermissive] 

我想這樣做的原因是,我想的東西轉換我不允許改變我能做的事情。

我可以寫這樣的代碼:

const SafeArray* = &other; 

但我不能返回值正確要麼。我在理論上顯然誤解了一些理論上的假設,有人可以解釋我錯過了什麼。我非常樂意自己編寫代碼,但我無法完全掌握此方法調用。

+2

你大概應該做一個'other'到'this'的深層副本。 – chris 2013-04-09 03:50:11

+0

因爲其他是'const',所以在分配給它之前,你需要製作它的副本。 – Patashu 2013-04-09 03:50:17

回答

1

正確定義這個操作符,你只需要複製對象SafeArrayother作爲參數傳遞的內容到this

知道如何完成此功能的唯一方法是瞭解SafeArray類的內容(即數據成員)。

+0

在這種情況下,SafeArray僅以整數作爲輸入。我設置的兩個數組是「x(10)」,它初始化長度爲10的數組,然後初始化一個數組「y(5)」,並初始化長度爲5.在這個例子中,它們還設置了x [3]到42什麼的。從那裏我有任務y = x。由於數組的長度不同,我認爲在這個例子中複製不起作用。 – Scott 2013-04-09 03:59:48

+0

@gRnt,然後使被分配的長度與分配給它的長度相匹配。這是一個運行時計算的值,根據您的構造函數獲取參數而不是具有模板參數的類。 – chris 2013-04-09 04:01:55

+0

我意識到,一旦我評論。我創建瞭如下的數組: SafeArray z(other.length_); 然後我試圖運行一個for循環,表示z [i] = other [i];但我仍然有const的問題(我顯然沒有正確地複製它們),我會繼續努力 – Scott 2013-04-09 04:05:55