[英]Overloading the stream insertion operator?
我正在用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.h
下的Vector3.h
,我輸入了此函數聲明:
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對象是一個地址指針,所以vector.getX()
行不應該使用->
而不是點嗎?
將const
限定詞添加到您的get...
函數中。
class Vector3
{
public:
float getX() const {return x;};
};
const
限定函數只是意味着您可以在該類的const
實例上調用它。 在這里,吸氣劑不會改變任何東西。 但是,如果未指定,編譯器將不知道,因此不允許調用可能會更改const
變量的const
。
您可以在此處閱讀有關const
-correctness的信息 。
點表示法是正確的, vector
不是指針 ,而是引用 (即其他Vector3
另一個名稱。 &
表示法,對於初學者而言,我可能會感到困惑。粗略地講:將其應用於變量時,它需要它的地址,如果它是類型的一部分,則意味着該類型是引用(例如,請參見此處或此處) 。
我懷疑您尚未將getX,getY和getZ函數聲明為const。 編譯器不允許您使用它們,因為不能確保它們不會更改對象的狀態。
您應該能夠將其聲明更改為以下形式:
float Vector3::getX() const
float Vector3::getX()
必須更改為
float Vector3::getX() const
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.