1

我是面向对象编程的新手,我想知道是否可以为一个类创建一个运算符,该运算符将使用这个类和另一个由我声明的参数。

我必须解决的问题是在给定点上的线性平移。所以我创建了类PointLinearTranslation基本上我想做的是创建一个运算符

Point operator* (Point p, LinearTranslation l) 

这需要Point p,翻译 l 然后返回Point。不过,我遇到了奇怪的错误:Point operator*(int)’ must have an argument of class or enumerated type或者那个LinearTranslation has not been declared.

它甚至可能吗?

好的,我只发布一点,因为这是一种任务,所以我有 Point.h 课程

很抱歉造成混乱,但我正在尝试一切,但它对我不起作用。

#include "LinearTranslation.h"
class Point {
public:
    int N;
    double* coordinates;

public:
    Point(int, double*);
    virtual ~Point();
    double operator[](int a);
    //friend Point operator*(LinearTranslation l);
    friend Point translation(LinearTranslation l);
};

LinearTranslation.h

#include "Point.h"

class LinearTranslation {
private:
    int N;
    double* vector;
    double** matrix;
public:
    //friend class Point;
    LTrans(int,double*,double**);
    LTrans(int);
    virtual ~LTrans();
    void write_vector();
    void write_matrix();
    LinearTranslation operator+(const LinearTranslation&);
    friend Point& translation(LTrans l, Point p);
    //friend Point& operator* (Point p, LTrans l);
};
4

1 回答 1

0

在你的班级声明中:

//friend Point operator*(LinearTranslation l);

运算符friend重载函数需要两个参数,您只需在代码中声明一个。友元函数最常见的示例是使用重载运算符<<,如下所示:

friend ostream& operator<<(ostream& output, const Point& p);

请注意,此函数将输出作为其第一个参数,将点作为其第二个参数。

您的解决方法是将操作数添加到函数中

friend Point operator*(LinearTranslation l, const int& MULT);
于 2012-11-04T20:31:17.640 回答