此指针和 suqare 括号过载
This pointer and suqare bracket overload
在我的类的公共方法中访问溢出的方括号时出现问题。这是代码:
#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
指针,如下所示:
(*this)[i]
或者你可以直接调用运算符,它的优点是其意图完全明确,但缺点是有点罗嗦和更晦涩(因此更有可能绊倒任何阅读它的人):
this->operator[](i)
如果您已经尝试过*this[i]
并发现它不能解决问题,那是因为它实际上意味着*(this[i])
!
除了错误的运算符 [] 实现之外,还有错误的使用:-
cout << this[i] << " ";
这应该是
cout << (*this)[i] << " "; //is you want to implement that way...
this
只是一个指针,所以要访问operator[]
你可以先取消引用它:
cout << (*this)[i] << " ";
或者直接调用函数(不是首选):
cout << this->operator[](i) << " ";
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- 此指针和 suqare 括号过载