0

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

当我在主要功能中这样做时:

Vector c(0,0),a(0,0),b(0,0);
c=Addition(a,b);

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

4

3 回答 3

4
c=Addition(a,b);

告诉编译器调用函数独立函数。您提供了一个成员函数而不是独立函数,因此编译器找不到任何成员函数并且它会抱怨。

您需要提供独立的功能。

于 2013-03-17T15:28:27.813 回答
3

由于您的Addition函数是 的成员Vector,因此您必须这样调用它:

c = Vector::Addition(a, b);

或者

c = a.Addition(b);

请注意,第一个要求Addition函数是static,这意味着它不对具体实例(this在函数体中)进行操作:

static Vector Addition(Vector a, Vector b);

但是你不能访问this指针,所以你必须默认构造temp而不是复制(顺便说一句,因为你覆盖了,所以没有使用xy

第二个使用左侧操作数作为this实现中的指针(a签名中没有)。

Vector Addition(Vector b)
{
    Vector temp = *this;
    temp.x += b.x;
    temp.y += b.y;
    return temp;
}

请注意,您还可以在 C++ 中重载运算符。为此,定义一个调用的非静态成员函数operator+,它接受第二个实例(第一个实例是this函数内的指针,它将是左侧操作数):

Vector operator+(const Vector &other) const;

实施(一种可能性):

Vector Vector::operator+(const Vector &other)
{
    Vector temp = *this;
    temp.x += other.x;
    temp.y += other.y;
    return temp;
}
于 2013-03-17T15:29:49.850 回答
1

Addition在里面声明Vector。正确的方法是...

(1) 将加法作为一个全局函数。这将涉及您从 Vector 类中取出 Addition 的定义。因此它看起来像

Vector Addition(/*parameters*/) { /* implementation */ }

(2) 用关键字将 Addition 设为 static static,并用 code 调用c = Vector::Addition(a, b)

代码看起来像

 class Vector{
 static Vector Addition(/* arguments */);
}

Vector Vector::Addition(/*arguments*/) {/*implementation*/}
于 2013-03-17T15:29:53.583 回答