所以这是Vector类公共继承中方法的声明:
Vector Addition(Vector a, Vector b);
这是课外的实现:
Vector Vector::Addition(Vector a, Vector b)
{
Vector temp = *this;
temp.x=a.x+b.x;
temp.y=a.y+b.y;
return temp;
}
当我在main函数中执行此操作时:
Vector c(0,0),a(0,0),b(0,0);
c=Addition(a,b);
我收到错误:标识符“添加”未定义。请帮忙!
答案 0 :(得分:4)
c=Addition(a,b);
告诉编译器调用函数独立函数。你提供了一个成员函数而不是一个独立的函数,所以编译器找不到任何东西而且它会抱怨。
您需要提供独立功能。
答案 1 :(得分:3)
由于您的Addition
功能是Vector
的成员,因此您必须将其称为:
c = Vector::Addition(a, b);
或
c = a.Addition(b);
请注意,第一个要求Addition
函数是 static ,这意味着它不能在具体实例(函数体中的this
)上运行:
static Vector Addition(Vector a, Vector b);
但是你无法访问this
指针,所以你必须默认构造temp
而不是复制(顺便说一句,因为你覆盖了{{1}无论如何}和x
。
第二个使用左侧操作数作为实现中的y
指针(签名中没有this
)。
a
请注意,您还可以在C ++中重载运算符。为此,定义一个名为Vector Addition(Vector b)
{
Vector temp = *this;
temp.x += b.x;
temp.y += b.y;
return temp;
}
的非静态成员函数,它接受第二个实例(第一个实例是函数中的operator+
指针,它将是左侧操作数):
this
实施(一种可能性):
Vector operator+(const Vector &other) const;
答案 2 :(得分:1)
您在Addition
内声明了Vector
。正确的方法是......
(1)添加为全局功能。这将涉及您从Vector类中获取Addition的定义。因此它看起来像
Vector Addition(/*parameters*/) { /* implementation */ }
(2)使用static
关键字将Addition设为静态,并使用代码c = Vector::Addition(a, b)
调用它。
代码看起来像
class Vector{
static Vector Addition(/* arguments */);
}
Vector Vector::Addition(/*arguments*/) {/*implementation*/}