私は次のようなベクトルクラスを持っています:
class Vector3
{
public:
Vector3(){m_x = m_y = m_z = 0.0f;}
Vector3(const float & i_x, const float & i_y, const float & i_z):
m_x(i_x),
m_y(i_y),
m_z(i_z)
{}
Vector3 operator+(const Vector3 & i_other);
private:
float m_x;
float m_y;
float m_z;
};
Vector3::Vector3 Vector3::operator+(const Vector3 & i_other)
{
float tx = m_x + i_other.m_x;
float ty = m_y + i_other.m_y;
float tz = m_z + i_other.m_z;
return Vector3(tx, ty, tz);
}
明らかに、戻り型が。ではなく、でVector3::operator+
あるため、synaxの定義は間違っています。名前空間があり、名前空間内にクラスがあることを意味します。しかし、私にはクラスしかなく、ここには名前空間はありません。Vector3::Vector3
Vector3
Vector3::Vector3
Vector3
Vector3
Vector3
私の質問は、Ubuntu 12.04では、上記の構文をコンパイルできないことです(Ubuntuのg ++コンパイラは[gccバージョン4.6.3]です)。ただし、Macでは、g ++はコードをコンパイルできます(Macのg ++コンパイラは[gccバージョン4.2.1]です)。また、この構文をRed Hat Linuxマシンでテストしましたが、機能します(g ++バージョンは[gccバージョン4.4.6]です)
それで、gccの異なるバージョンは異なるコンパイル原理を持っていますか?または、Ubuntuのg ++が壊れましたか?