我正在C++中製作一個三維矢量類(稱爲Vector3
)。現在,我試圖重載流插入操作符(<<
),以便我可以一次全部打印所有矢量的所有組件。我從MSD複製sintax,但我得到了3個錯誤。重載流插入操作符?
error: passing 'const Vector3 ' as 'this' argument of 'float Vector3::getX()' discards qualifiers [-fpermissive]
error: passing 'const Vector3 ' as 'this' argument of 'float Vector3::getY()' discards qualifiers [-fpermissive]
error: passing 'const Vector3 ' as 'this' argument of 'float Vector3::getZ()' discards qualifiers [-fpermissive]
(差別標記爲粗體)
在受到公衆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.getX()
行不應使用->
而不是點,因爲矢量對象是地址指針嗎?
是'的getX()''一個成員const'功能? – hmjd 2012-08-14 13:46:17
如果你的'operator <<'只需要調用'Vector3'的公共成員函數就不需要成爲'friend'。 – Blastfurnace 2012-08-14 13:49:17
至於你的旁註,不,它不應該 - vector參數不是一個指針(語法上),它是一個參考。引用變量與值變量具有相同的「點」語法。 – 2012-08-14 13:50:23