对运算符*
和/
重载,当把这两种重载函数都在.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 #include using namespace std; class Vector3 { public: /*缺省的构造函数*/ Vector3() { x = 0; y = 0; z = 0; } Vector3(float x, float y, float z); ~Vector3(){cout<<"执行析构函数" <
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 = "<
运行上述程序不会报错。但是若将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时,则没有上述错误,请问为什么??
看不出问题在哪里。在Archlinux下使用gcc 6.3.1编译也没有问题。
你把注释都去掉,然后重新编译一次试试。有可能是编码的原因。
Vector.h
Vector.cpp
编译运行结果