这种添加方法有什么问题?

时间:2013-03-17 15:24:55

标签: c++ class methods console-application

所以这是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);

我收到错误:标识符“添加”未定义。请帮忙!

3 个答案:

答案 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*/}