2012-03-29 85 views
1

我想重载*运算符以便乘以两个对象(点积)。C++中的重载运算符

这些对象可以是Point3D,Vector3DNormal。它们基本上都具有相同的结构(x,y和z值),我只将它们分解为语义。

是给我找麻烦线路是这样的:

float t = (point - r.origin)*normal/(r.direction * normal); 

这里,点和r.origin是Point3D,正常是Normal和r.direction是Vector3D。在这些类的头文件,我有以下过载功能:

在Vector3D.h:

Vector3D operator *(Normal& n); 

在Point3D.h:

Point3D operator -(Point3D& p); 
Point3D operator *(Normal& n); 

我得到的错误是:

No match for 'operator*' in 'r->Ray::direction * ((const Plane*)this)->Plane::normal' 

假设我已经正确地填写了.cpp文件中的函数,有没有什么愚蠢的我已经完成这里?另外,请忽略这样一个事实,那就是没有分工操作员......这正在进行中!

干杯

回答

5

您可能已经定义了一元版本而不是二进制版本。 (您是否在类{...}内定义了它们?)

或者您可能没有将它们定义为const。试试这个:

Vector3D operator *(const Normal& n) const; 
Point3D operator -(const Point3D& p) const; 
Point3D operator *(const Normal& n) const; 

在过去这样的hetrogeneous参数二元函数我觉得轻松了很多一起在全局范围从班一个单独的文件/地方和朋友他们定义所有。

2

你的this看起来像它可能const(只是从错误消息猜测,因为你没有在你的问题中包括该代码)。尝试:

Vector3D operator *(const Normal& n); 

Point3D operator -(const Point3D& p); 
Point3D operator *(const Normal& n); 
+0

欢呼的帮助,但将其全部更改为常量给我'丢弃限定符'的错误。对不起,我昨天才开始C++:/ – 2012-03-29 00:23:27

+1

也许你可以给我们提供一个[* complete * example](http://sscce.org),它可以证明你遇到的问题。我们只能猜测代码的其余部分是什么样的,对任何人来说都没有什么效果。 – 2012-03-29 00:24:29

+0

'丢弃限定符'意味着你在函数中调用了一些不需要'const'的东西,但可能应该这样做。向我们展示更多代码。 – 2012-03-29 00:25:42