我现在正在努力解决一个奇怪的错误,我需要你的帮助:D
我有一个'Image'类声明为
template <typename P>
class Image {
// ...
public: // Operators
Color<P>*& operator [] ( unsigned int const& i );
// ...
}
因为这是我第一次重载此运算符,所以我不太确定(特别是*&amp; part ...)
当我尝试这样的事情时出现问题:
/// 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>
显然,对我的解决方案更加困难......
有什么想法吗?
谢谢!
答案 0 :(得分:0)
所有“不匹配'...'”错误意味着调用中的参数与任何函数或运算符的声明参数不兼容,因此您应该查看参数声明。使operator[]
参数为unsigned int。类似地,通过引用传递返回的指针是很奇怪的;不一定是坏事,但高度怀疑。通常,非复合类型应按值传递。
答案 1 :(得分:0)
首先,没有必要通过引用传递这么多东西。按值取无符号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
,这可能不是该课程的用法。