簡體   English   中英

重載流插入運算符?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM