Dua*_*man 1 c++ operator-overloading
我试图重载*运算符,以便乘以两个对象(点积).
这些对象可以是Point3D,Vector3D或Normal.它们基本上都具有相同的结构(x,y和z值),我只是将它们拆分为语义.
给我带来麻烦的那条线是这样的:
float t = (point - r.origin)*normal / (r.direction * normal);
Run Code Online (Sandbox Code Playgroud)
这里,point和r.origin是a Point3D,normal是a Normal,r.direction是a Vector3D.在这些类的头文件中,我有以下重载函数:
在Vector3D.h中:
Vector3D operator *(Normal& n);
Run Code Online (Sandbox Code Playgroud)
在Point3D.h中:
Point3D operator -(Point3D& p);
Point3D operator *(Normal& n);
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
No match for 'operator*' in 'r->Ray::direction * ((const Plane*)this)->Plane::normal'
Run Code Online (Sandbox Code Playgroud)
假设我已经正确地填写了.cpp文件中的函数,那么我在这里做了什么愚蠢的事吗?另外,忽略了没有除法运算符的事实......它正处于管道中!
干杯
您可能已经定义了一元版本而不是二进制版本.(你在班级{...}里面定义了吗?)
或者您可能没有将它们定义为const.试试这个:
Vector3D operator *(const Normal& n) const;
Point3D operator -(const Point3D& p) const;
Point3D operator *(const Normal& n) const;
Run Code Online (Sandbox Code Playgroud)
对于像这样的hetrogeneous参数的二进制函数,我发现在全局范围内将它们一起定义在一个单独的文件/位置并且从类中与它们交朋友要容易得多.
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |