gpt4 book ai didi

c++ - 我应该如何正确重载使用 friend 的运算符?

转载 作者:行者123 更新时间:2023-11-30 02:34:35 25 4
gpt4 key购买 nike

<分区>

我有一个 Matrix 类和一个 Vector 类,它们在头文件中有声明,在它们自己的源文件中有定义,我想重载 * 运算符两种方式。我希望能够写出这样的表达式

Matrix m1, m2, m3;
...
m3 = m1 * m2;

还有像

这样的表达
Vector v1, v2;
Matrix m;
...
v2 = m * v1;


第一次重载看起来很简单,因为它只是 Matrix 类的一个成员函数:

class Matrix {
public:
Matrix operator*(Matrix &m)
}

摘自 matrix.hpp

但是,我不确定在哪里/如何声明/定义运算符的其他重载。我以为我需要一个 friend 函数来访问这两个类的私有(private)成员,所以我在 Vector 类中尝试了以下声明:

class Vector {
public:
friend Vector operator*(const Matrix &m, const Vector &v);
}

摘自vector.hpp

这似乎遵循了我在 this question 中找到的模式在接受的答案中,尽管它是不同运算符的重载。但是,当我尝试编译定义重载的源文件时,出现错误,因为它无法访问 Matrix 类的私有(private)成员。

我见过的大多数其他问题和答案都试图重载二元运算符以作用于同一类的两个实例,就像我的第一个例子一样,事实上我的链接答案是我见过的唯一地方类似于我正在做的事情。

那么这个应该怎么定义呢?

编辑:

the possible duplicate 的公认答案指出“仅当它需要访问私有(private)成员时才使其成为 friend 。”我确实需要访问私有(private)成员,但我的编译器告诉我,即使在将它设为 friend 之后,我仍然无法访问 Matrix 的私有(private)成员。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com