簡體   English   中英

下標運算符重載和對指針錯誤的引用

[英]Subscript operator overload and reference to pointer error

我一段時間以來一直在遇到一個奇怪的錯誤,需要您的幫助:D

我有一個像聲明的“圖像”類

template <typename P>
class Image {
// ...
public: // Operators 
    Color<P>*& operator [] ( unsigned int const& i );
// ...
}

由於這是我第一次重載此運算符,因此我不太確定(尤其是*&部分...)

當我嘗試以下操作時,出現Troube:

/// Sample Code
Image<P> img; img[0][0] = Color<double>(1.0, 1.0, 1.0);

我懂了

./src/Graphics/PNGWriter.cc:12:3: error: no match for ‘operator[]’ in ‘img[0]’
./src/Graphics/Image.cc:24:12: note: candidate is: Color<P>*& Image<P>::operator[](const unsigned int&) [with P = double] <near match>

顯然,對我來說解決方案有點晦澀難懂...

任何想法 ?

謝謝 !

所有“不匹配'...'”錯誤都意味着調用中的參數與任何函數或運算符的聲明參數都不兼容,因此您應查看參數聲明。 operator[]的參數設為無符號整數。 同樣,通過引用傳遞返回的指針也很奇怪。 不一定不好,但高度懷疑。 通常,非復合類型應按值傳遞。

首先,不需要通過引用傳遞很多東西。 幾乎可以肯定的是,將unsigned int值作為值將不會減慢速度。 關於指針的引用也一樣。

這可能是問題,但我對此表示懷疑。 我不明白為什么0不會轉換為unsigned int const& 另一種可能性是該圖像實際上是const ,但是您在粘貼中沒有提及。 下標運算符通常成對出現。 您需要將另一個聲明為Color<P> const* operator [] ( unsigned int i ) const;

注意img[0]是被抱怨的,所以= Color<double>(1.0, 1.0, 1.0); 可能不是問題(除非我遺漏了一些SFINAE錯誤)。 最后,請確保您沒有將Image專業化為double

編輯:順便說一句,返回Color<P>*&有一個嚴重的缺點。 有人可以做到img[0] = 0 ,這可能不是使用該類的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM