对运算符*
和/
重载,当把这两种重载函数都在.h
文件中定义时,不报错,当把他们在.cpp
文件实现时,提示:“vector.cpp:44:37: error: no ‘Vector3 Vector3::operator/(float)’ member function declared in class ‘Vector3’
Vector3 Vector3::operator/(float num)”。
vector.h
/*实现Vector3(三维向量)相关运算的类*/
#ifndef VECTOR_3
#define VECTOR_3
#include <iostream>
#include <algorithm>
using namespace std;
class Vector3
{
public:
/*缺省的构造函数*/
Vector3()
{
x = 0;
y = 0;
z = 0;
}
Vector3(float x, float y, float z);
~Vector3(){cout<<"执行析构函数" <<endl;}
float getX() const {return x;}
float getY() const {return y;}
float getZ() const {return z;};
/*三维向量的相关运算*/
void set(float _x,float _y,float _z);
Vector3 operator+(const Vector3 &v);
Vector3 operator-(const Vector3 &v);
Vector3 operator*(float num);
Vector3 operator/(float num);
friend ostream &operator<<(ostream &out,Vector3 &v)
{
out<<"("<<v.x<<","<<v.y<<","<<v.z<<")"<<endl;
return out;
}
private:
float x;
float y;
float z;
};
Vector3 Vector3::operator*(float num)
{
return Vector3(x*num,y*num,z*num);
}
Vector3 Vector3::operator/(float num)
{
return Vector3(x/num,y/num,z/num);
}
#endif
vector.cpp
#include "vector.h" //注意这里,不要yong<>.否则就是去系统中找了
Vector3::Vector3(float x,float y,float z)
{
this->x = x;
this->y = y;
this->z = z;
}
void Vector3::set(float _x,float _y,float _z)
{
x = _x;
y = _y;
z = _z;
}
Vector3 Vector3::operator+(const Vector3 &v)
{
return Vector3(x+v.x,y+v.y,z+v.z);
}
Vector3 Vector3::operator-(const Vector3 &v)
{
return Vector3(x-v.x,y-v.y,z-v.z);
}
int main(int argc,char **argv)
{
Vector3 v1(1,2,3);
Vector3 v2(2,3,4);
Vector3 v3 = v1+v2;
cout<<"v1 + v2 = "<<v3<<endl;
return 0;
}
运行上述程序不会报错。但是若将vector.h
中的
Vector3 Vector3::operator*(float num)
{
return Vector3(x*num,y*num,z*num);
}
Vector3 Vector3::operator/(float num)
{
return Vector3(x/num,y/num,z/num);
}
实现部分放到vector.cpp
文件中,则会报错!
求解释?
自己所用系统为Gentoo Linux 编译器g++。
当把上述代码移植到window+vs2013时,则没有上述错误,请问为什么??
I can’t see where the problem is. There is no problem compiling with gcc 6.3.1 under Archlinux.
Remove all the comments and try recompiling again. It may be due to encoding.
Vector.h
Vector.cpp
Compile and run results