以下代碼是Distance類的一部分。運算符重載是一個朋友函數,聲明爲Distance類的私有成員,我嘗試調用的函數是公共成員。此函數不會更改Distance類的成員變量。從朋友函數內的對象訪問成員函數
我試圖保持兩個引用參考對象d1和d2不變,但我的編譯器說我通過調用ConvertToInches函數或位於距離類內的任何函數來違反它們的const屬性,儘管這些函數不改變Distance類中的私有變量。
當我不使d1和d2保持不變時,編譯器沒有問題。
任何人都可以解釋如何讓d1和d2不斷調用這個函數,爲什麼我不工作?
謝謝!
const Distance operator+(const Distance& d1, const Distance d2)
//this is a friend function
//declared in private section of Distance class
{
//this function is what causes problems !!!!!!!
d1.ConvertToInches(1, 2, 3, 4);
Distance d3 = 3;
return d3;
}
Distance::ConvertToInches(const int cMiles, const int cYards, const int cFeet, const int cInches)
//declared in public section of Distance class
{
cMiles = cMiles * 63360;
cYards = cYards *36;
cFeet = cFeet * 12;
int cSum = cMiles + cYards + cFeet + cInches;
return cSum;
}
我不知道爲什麼@CIsForCoocckies刪除了答案:根據你的'ConvertToInches'聲明,它是一個非const成員函數。這些可能不會被稱爲'const'對象,例如朋友'operator +'的參數。 – dyp 2014-10-05 01:06:47
或者'ConvertToInches'是一個'static'成員函數嗎? (從你所展示的代碼片段中不清楚)在任何情況下,如果它不訪問任何數據成員或'Distance'的私有成員,那麼沒有理由爲什麼它應該是成員函數,靜態的。 – dyp 2014-10-05 01:12:08