Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;如何在另一个类中使用运算符重载_C++ - Fatal编程技术网

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

C++ C++;如何在另一个类中使用运算符重载,c++,C++,编译器显示错误“operator=”是“vec3”的私有成员。这是怎么发生的?更改为 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;

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

更改为

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;
} };
运算符方法已公开,并且可以从外部代码中看到。
此外,类
vec2
中的
operator=
的定义是不必要的,因为这是该类运算符的默认行为。顺便说一下,
vec3
中的
operator=
也是不必要的


也许您应该从类转换为结构。

< P>默认情况下,C++中的类成员是私有的。p> 要允许外部代码看到该运算符,需要将其指定为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;
}  };

class
可见性默认为
private
。添加<代码>公有:<代码> >你似乎想使用<代码>结构> <代码>,用于琐碎的<代码> VEC3和 VEC2,而不是<代码>类< /代码>。这不是C++中重要的,但是在他开始上课时,他需要“公共的”。
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;
}  };