我有一个“Foo.cpp”类和一个“Bar.cpp”类。我想在Foo的两个参数上重载+操作符,以便添加两个Foos返回一个Bar,其值是它们值的乘积。该代码看起来像C++从类中的函数实例化不同的类
//Foo.h
class Foo
{
public:
double foo_val;
Foo();
Foo(double);
};
Bar* operator+ (Foo&, Foo&)
。
//Foo.cpp
#include "Foo.h"
Foo::Foo(){foo_val = 0;}
Foo::Foo(double d){foo_val = d;}
Bar* operator+ (Foo& f1, Foo& f2){
return new Bar(f1.foo_val*f2.foo_val);
}
。
#include "Foo.h"
#include "Bar.h"
int main(){
Foo f1 = new Foo(4, 5);
Foo f2 = new Foo(1, 2);
Bar = f1+f2;
}
Bar与Foo在此基本相同,它有一个构造函数“Bar(double);”
目前它不工作,我认为因为在我试图制作一个新的之前Bar尚未定义。 (编译器错误是“'Bar'没有命名一个类型”)但是,我知道我不能在前面转发declare Bar,因为它只能用于指针,而我正在尝试构建一个新的。有什么方法可以让这种类型的东西起作用,或者我是否完全错误?
谢谢!
我认为像这样定义运算符+函数可能会更好:Bar运算符+(const Foo&f1,const Foo&f2)。否则,你应该跟踪Bar *,并且不能做出像f1 + f2 + B2这样的东西。看看这个页面http://users.cms.caltech.edu/~donnie/cs11/cpp/cpp-ops.html – phoad