我有一个矢量类,如下所示:
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 version 4.6.3])。但是,在 Mac 中,g++ 可以编译代码(Mac 的 g++ 编译器是 [gcc version 4.2.1])。另外,我在 Red Hat linux 机器上测试了这个语法,它也可以工作(g++ 版本是 [gcc 版本 4.4.6])
那么,是不是不同版本的gcc编译原理不同呢?或者,我在 Ubuntu 中的 g++ 坏了?