我有一个载体类是这样的:C++类函数的返回类型定义,返回一个类
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 version 4.2.1])。另外,我在Red Hat linux机器上测试这个语法,它也起作用(g ++版本是[gcc版本4.4.6])
那么,它是不同版本的gcc有不同的编译原理吗?或者,我在Ubuntu的g ++打破了?
这是相关的:http:// stackoverflow。com/questions/12135498/why-are-redundant-scope-qualifications-by-the-compiler-and-is-it-lega – chris
不是答案,而是:将浮点参数作为参考传递的意义到构造函数? – jogojapan
@jogojapan:也许对于浮点,没有必要传递一个引用。但我认为使用constance引用传递参数可以使代码稳定。 – geekmayplay