0

我正在为一个奇怪的错误苦苦挣扎一段时间,我需要你的帮助:D

我有一个像这样声明的“图像”类

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

因为这是我第一次重载这个运算符,所以我不太确定(尤其是 *& 部分......)

当我尝试类似的事情时出现了麻烦:

/// 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>

显然,对我来说,这个解决方案更加模糊......

任何想法 ?

谢谢 !

4

2 回答 2

0

所有“不匹配'...'”错误意味着调用中的参数与任何函数或运算符的声明参数不兼容,因此您应该查看参数声明。operator[]对无符号整数进行论证。同样,通过引用传递返回的指针也很奇怪。不一定坏,但高度怀疑。一般来说,非复合类型应该按值传递。

于 2011-11-04T00:54:55.950 回答
0

首先,没有必要通过引用传递这么多东西。按值取 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 错误)。最后,确保你没有专门Imagedouble.

编辑:顺便说一句,返回Color<P>*&有一个严重的劣势;有人可以这样做img[0] = 0,这可能不是该类的使用方式。

于 2011-11-04T02:37:50.803 回答