考慮下面的代碼(我使用不完全是,但只是突出問題)類的成員函數改變類成員常量
class Pointarr //creates an array of points which can be recalled by object
{
public:
Pointarr(int, int, bool);
~Pointarr(){};
mutable Point array[];
private:
void fillarray(int) const;
int const minpix;
int const mirrors;
bool const canvasfeed;
};
void Pointarr::fillarray(int mirrors) const
{
Point zero(0,0);
for(int i = 0; i < mirrors; i++)
{
array[i] = zero;
}
}
Pointarr::Pointarr(Mat dt, int mpx, int mir, bool cf) : dot(dt), minpix(mpx), mirrors(mir), canvasfeed(cf)
{
fillarray(mirrors);
}
我會得到一些東西出來的首先,我在linux上本地使用gcc C++編譯器。我使用OpenCV庫,其中Point是一種變量類型,其格式爲(x,y)。我相信它只是在內存中使用足夠的空間來保存每個數字,所以對於兩個整數,x將是4bytes,y是4bytes。
我遇到的問題是構造函數聲明(Pointarr())中的變量正確初始化,我確認了這一點,但是當我調用fillarray(int)函數來填充零值,(0,0),它會導致變量mirrors和minpix都變爲0,因爲canvasfeed保持原樣,但這只是當鏡像等於1時。
現在,讓我們指定一些東西,當鏡像爲1時,fill array中的循環只運行一次,這意味着該數組只有一個值(一個點)。如果我將鏡像設置爲2,那麼canvasfeed也變爲0.我認爲很明顯fillarray函數分配了用於將我的私有變量保存到數組的相同內存,因此正在改變我的私有變量。這是一個問題,因爲我需要它們以備後用。
事情是,我導致認爲使私有變量爲常量意味着編譯器將會抱怨,如果在任何時候變量被改變,但它在這種情況下編譯罰款,如果我誠實,雖然我不'完全理解應該如何使用const(甚至幾乎不)。
所以最後問題是,我如何避免使數組使用這個我需要的其他內存,但仍然初始化它具有與鏡像相同數量的元素插槽。
非常感謝您的回覆,我會嘗試這一點,看看會發生什麼,如果不是太麻煩但是,你能可能使用說明什麼具體區別一個向量使得(除了使它工作),因爲我現在還在學習。只需鏈接到合適的資源,我們將同樣感激。 – user2295561