C ++如何在另一个类中使用运算符重载

时间:2018-04-22 04:53:11

标签: c++

class  vec3{
float x;
float y;
float z;

const vec3 & operator= (const vec3 &rvec3)
{
    x = rvec3.x;
    y = rvec3.y;
    z = rvec3.z;
    return *this;
}  };

class vec2{
vec3 vetex;
vec3 normal;

const vec2 & operator = (const vec2 &rvec2)
{
    vetex = rvec2.vetex;
    normal= rvec2.normal;
    return *this;
} };

编译器显示错误“operator =”是'vec3'的私有成员。怎么会发生这种情况?

2 个答案:

答案 0 :(得分:2)

更改为

class  vec3{
float x;
float y;
float z;

public:
const vec3 & operator= (const vec3 &rvec3)
{
    x = rvec3.x;
    y = rvec3.y;
    z = rvec3.z;
    return *this;
}  };

操作员方法已公开,并且可从外部代码中看到 此外,类operator=vec2的定义是不必要的,因为它是此类的运算符的默认行为。顺便说一下,operator=中的vec3也是不必要的。

也许你应该从一个类改为结构。

答案 1 :(得分:1)

默认情况下,c ++中的类成员是私有的。

要允许外部代码查看运算符,您需要将其指定为public。

class  vec3{
float x;
float y;
float z;
public:
const vec3 & operator= (const vec3 &rvec3)
{
    x = rvec3.x;
    y = rvec3.y;
    z = rvec3.z;
    return *this;
}  };