下面的代碼下的gcc編譯罰款:你應該能夠在課堂上定義一個朋友嗎?
class vec3
{
private:
float data[3];
public:
vec3(float x, float y, float z)
{
data[0] = x;
data[1] = y;
data[2] = z;
}
void operator =(const vec3 &v)
{
data[0] = v.data[0];
data[1] = v.data[1];
data[2] = v.data[2];
}
friend vec3 operator *(float a, const vec3 &v)
{
vec3 res(v.data[0], v.data[1], v.data[2]);
res.data[0] *= a;
res.data[1] *= a;
res.data[2] *= a;
return res;
}
};
int main(int argc, char **argv)
{
vec3 v(1.0, 2.0, 3.0);
vec3 u = 2*v;
return 0;
}
似乎壽操作*,是因爲它被聲明爲朋友被編譯爲一個非成員函數的類中定義。這是標準行爲嗎?定義一個非成員函數似乎有些奇怪,我還沒有看到在任何課本/常見問題(通常在課堂中聲明並在外面定義)中定義非成員朋友的方式。
james
是。我討厭人們這樣做。這很難告訴非會員。我更喜歡定義與課堂分開的朋友(也是我們編碼標準的一部分)。但這是合法的。 – 2010-08-19 15:22:25