【发布时间】:2012-08-10 19:45:16
【问题描述】:
我正在用 c++ 制作一个三维矢量类(称为Vector3)。现在,我正在尝试重载流插入运算符 (<<),以便我可以一次直接打印所有向量的组件。我从 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.hpublic下,我输入了这个函数声明:
friend ostream& operator<<(ostream &os, const Vector3 &vector);
在Vector3.cpp,我实现了它:
ostream& operator<<(ostream& os, const Vector3& vector)
{
os << "(" << vector.getX() << ", " << vector.getY() << ", " << vector.getZ() << ")" << endl;
return os;
}
它应该根据 x、y 和 z 变量打印出类似 (x, y, z) 的内容。
顺便说一句,vector.getX() 行不应该使用-> 而不是点,因为向量对象是地址指针吗?
【问题讨论】:
-
getX()是const成员函数吗? -
你的
operator<<不需要是friend,如果它只调用Vector3的公共成员函数。 -
就您的旁注而言,不应该 -
vector参数不是指针(在语法上),它是一个引用。引用变量与值变量具有相同的“点”语法。
标签: c++ operator-overloading iostream