在我的类的公共方法中访问溢出的方括号时遇到问题。这是代码:
#include <iostream>
#include <cassert>
#include <cmath>
using namespace std;
template<unsigned int DIM> class Vector
{
private:
double mData[DIM];
public:
Vector(double tableau[DIM])
{
for(int i=0; i<DIM; i++)
{
mData[i] = tableau[i];
}
}
double operator[](int index)
{
assert(index < DIM);
assert(index > -1);
assert(-pow(10,-6)<=mData[index]<=1+pow(10,-6));
if(mData[index]>=0 && mData[index]<=1)
{
return mData[index];
}
else if(mData[index]<0 && mData[index]>=pow(10,-6))
{
return 0.0;
}
else if(mData[index]>1 && mData[index]<= 1+ pow(10,-6))
{
return 1.0;
}
}
double getDim() const
{
return DIM;
}
void print() const
{
for(int i=0;i<getDim();i++)
{
cout << this[i] << " "; //PROBLEM!!
}
}
};
int main()
{
double err=pow(10,-6);
double tableau[5];
tableau[0] = 0.5;
tableau[1] = 0.79;
tableau[2] = err;
tableau[3] = 1+err;
tableau[4] = 0;
Vector<5> proba(tableau);
proba.print();
}
我已尝试使用* this,this-&gt;,但任何似乎都有效。 我希望你能帮助我。 Florent的
答案 0 :(得分:1)
成员运算符重载需要类类型的值或引用,this
是指针。因此,您需要在使用运算符之前取消引用this
指针,如下所示:
(*this)[i]
或者你可以直接调用操作符,它的优点是完全明确其意图,但缺点是有点罗嗦而且有点模糊(因此更有可能绊倒任何阅读它的人) :
this->operator[](i)
如果您已经尝试*this[i]
并发现它无法解决问题,那是因为它实际上意味着*(this[i])
!
答案 1 :(得分:0)
除了错误地实现operator []之外,错误地使用它: -
cout << this[i] << " ";
这应该是
cout << (*this)[i] << " "; //is you want to implement that way...
答案 2 :(得分:0)
this
只是一个指针,因此要访问operator[]
,您可以先取消引用它:
cout << (*this)[i] << " ";
或直接调用该函数(不是首选):
cout << this->operator[](i) << " ";