重载流插入运算符?

dan*_*pen 1 c++ iostream operator-overloading

我正在Vector3用c ++ 制作一个三维矢量类(称为).现在,我试图重载流插入操作符(<<),以便我可以一次性直接打印所有向量的组件.我从MSD复制了sintax ,但是我得到了3个错误.

错误:传递'const Vector3'作为'float Vector3 :: getX()的'this'参数'丢弃限定符[-fpermissive]
错误:将'const Vector3'作为'float Vector3 :: getY() '的'this'参数传递抛弃限定符[-fpermissive]
错误:将'const Vector3'作为'float Vector3 :: getZ()'的'this'参数传递,丢弃限定符[-fpermissive]

(差异用粗体标出)

Vector3.h公开场合,我输入了这个函数声明:

friend ostream& operator<<(ostream &os, const Vector3 &vector);
Run Code Online (Sandbox Code Playgroud)

Vector3.cpp,我实现了它:

ostream& operator<<(ostream& os, const Vector3& vector)
{
    os << "(" << vector.getX() << ", " << vector.getY() << ", " << vector.getZ() << ")" << endl;
    return os;
}
Run Code Online (Sandbox Code Playgroud)

它应该打印出类似于(x, y, z)x,y和z变量的东西.

在旁注中,不应该vector.getX()使用线->而不是点,因为矢量对象是地址指针?

BoB*_*ish 6

const为您的get...函数添加限定符.

class Vector3
{
    public:
        float getX() const {return x;};
};
Run Code Online (Sandbox Code Playgroud)

一个const-qualified功能只是意味着你可以把它叫做一个const类的实例.在这里,吸气剂不会改变任何东西.但是,如果您没有指定,编译器不知道,因此不允许调用可能更改const变量某些内容的函数.

你可以在这里阅读 - const正确性.

点符号是正确的,vector不是一个指针,而是一个引用(即其他一些名称Vector3.&对于我认为的初学者来说,符号可能有点混乱.粗略地说:当你将它应用于一个变量时,它需要它的地址,当它是一个类型的一部分时,它意味着类型是一个引用.例如,见这里这里.