Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 下标运算符重载和指针引用错误_C++_Overloading_Operator Keyword_Subscript - Fatal编程技术网

C++ 下标运算符重载和指针引用错误

C++ 下标运算符重载和指针引用错误,c++,overloading,operator-keyword,subscript,C++,Overloading,Operator Keyword,Subscript,我正在与一个奇怪的错误斗争一段时间,我需要你的帮助:D 我有一个“Image”类声明为 template <typename P> class Image { // ... public: // Operators Color<P>*& operator [] ( unsigned int const& i ); // ... } 因为这是我第一次重载这个操作符,所以我不太确定,尤其是*&部分 当我尝试以下方法时,troube出现: /// S

我正在与一个奇怪的错误斗争一段时间,我需要你的帮助:D

我有一个“Image”类声明为

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>
很明显,这个问题对我来说有点棘手

有什么想法吗


谢谢

所有与“…”不匹配的错误意味着调用中的参数与任何函数或运算符的声明参数不兼容,因此您应该查看参数声明。将运算符[]的参数设为无符号整数。类似地,通过引用传递返回的指针也很奇怪;不一定不好,但很可疑。一般来说,非复合类型应该按值传递。

首先,没有必要通过引用传递这么多内容。按值取无符号整数几乎肯定不会减慢速度;对指针的引用也是如此

这可能是问题所在,但我对此表示怀疑;我不明白为什么0不能转换为无符号int常量&。另一种可能是图像实际上是常量,但您在粘贴中没有提到这一点。下标运算符通常成对出现;您需要将另一个声明为Color

const*运算符[]unsigned int i const

注意,img[0]是被投诉的对象,因此=Color1.0,1.0,1.0;可能不是问题,除非我遗漏了一些SFINAE错误。最后,请确保您没有专门的双重形象


编辑:顺便说一下,返回颜色*&有一个严重的缺点;有人可以执行img[0]=0,这可能不是类的使用方式。

实际上我尝试过,但因为它与确切的签名不匹配,所以我尝试了这个…Color是否有重载运算符[]?不,为什么它有重载运算符,它可以索引RGB组件,但特别是针对这个问题?您使用的编译器是什么?请发表一篇完整、简洁的文章来再现这种行为。