C++ 首先在这里定义

C++ 首先在这里定义,c++,C++,我的所有重载运算符都会出现错误“First Defined Here” 我没有在其他任何地方声明这些重载运算符,我无法了解发生了什么 我的代码(这是头文件): #ifndef向量 #定义向量 #包括 使用名称空间std; 类向量 { 公众: 向量(); 双Getx(); 双Gety(); 双Getz(); 无效Setx(双a); void Sety(双b); void Setz(双c); friend ostream&operator(istream&mystream,Vector&v); 私人

我的所有重载运算符都会出现错误“First Defined Here”

我没有在其他任何地方声明这些重载运算符,我无法了解发生了什么

我的代码(这是头文件):

#ifndef向量
#定义向量
#包括
使用名称空间std;
类向量
{
公众:
向量();
双Getx();
双Gety();
双Getz();
无效Setx(双a);
void Sety(双b);
void Setz(双c);
friend ostream&operator(istream&mystream,Vector&v);
私人:
双x,y,z;
};
布尔运算符==(向量a、向量b)
{
返回(a.Getx()==b.Getx()&&a.Gety()==b.Gety()&&a.Getz()==b.Getz());
}
接线员=(向量a,向量b)
{
返回!(a==b);
}
向量运算符+(向量a、向量b)
{
双k=a.Getx()+b.Getx();
双l=a.Gety()+b.Gety();
双m=a.Getz()+b.Getz();
向量v;
v、 Setx(k);
v、 赛蒂(l);
v、 Setz(m);
返回v;
}
双运算符*(向量a,向量b)
{
双r=a.Getx()*b.Getx()+a.Gety()*b.Gety()+a.Getz()*b.Getz();
返回r;
}
向量运算符*(向量a,浮点b)
{
向量v;
v、 Setx(v.Getx()*b);
v、 Sety(v.Gety()*b);
v、 Setz(v.Getz()*b);
返回v;
}

ostream&运算符将函数定义移动到.cpp文件中。“首先在此处定义”不是错误消息。这是关于前面错误消息的信息,应该包含在问题中。通常类似于“错误:xxxx的重新定义,首次定义于yyyy”。因此,发生错误的行是第二个定义,“first defined at”是第一个定义。如果你把定义放在头文件中,它们必须是
内联的
。所以要么这样做,要么按照Johnny Mopp的建议将它们移动到.cpp文件中。谢谢大家。我将它们移到了.cpp文件中,现在可以使用了。我很困惑,因为在教授的幻灯片中,它们看起来像是在.h文件中,但我想这只是一个沟通错误哈哈。这回答了你的问题吗?将函数定义移动到.cpp文件中。“首先在此处定义”不是错误消息。这是关于前面错误消息的信息,应该包含在问题中。通常类似于“错误:xxxx的重新定义,首次定义于yyyy”。因此,发生错误的行是第二个定义,“first defined at”是第一个定义。如果你把定义放在头文件中,它们必须是
内联的
。所以要么这样做,要么按照Johnny Mopp的建议将它们移动到.cpp文件中。谢谢大家。我将它们移到了.cpp文件中,现在可以使用了。我很困惑,因为在教授的幻灯片中,它们看起来像是在.h文件中,但我想这只是一个沟通错误哈哈。这回答了你的问题吗?
#ifndef VECTOR_H
#define VECTOR_H
#include <iostream>

using namespace std;

class Vector
{
    public:
        Vector();
        double Getx();
        double Gety();
        double Getz();
        void Setx(double a);
        void Sety(double b);
        void Setz(double c);
        friend ostream &operator<<(ostream &mystream, Vector &v);
        friend istream &operator>>(istream &mystream, Vector &v);
    private:
        double x, y, z;
};

bool operator==(Vector a, Vector b)
{
    return (a.Getx() == b.Getx() && a.Gety() == b.Gety() && a.Getz() == b.Getz());
}

bool operator!=(Vector a, Vector b)
{
    return !(a==b);
}

Vector operator+(Vector a, Vector b)
{
    double k = a.Getx() + b.Getx();
    double l = a.Gety() + b.Gety();
    double m = a.Getz() + b.Getz();
    Vector v;
    v.Setx(k);
    v.Sety(l);
    v.Setz(m);
    return v;
}

double operator*(Vector a, Vector b)
{
    double r = a.Getx()*b.Getx() + a.Gety()*b.Gety() + a.Getz()*b.Getz();
    return r;
}

Vector operator*(Vector a, float b)
{
    Vector v;
    v.Setx(v.Getx()*b);
    v.Sety(v.Gety()*b);
    v.Setz(v.Getz()*b);
    return v;
}

ostream &operator<<(ostream &mystream, Vector &v)
{
mystream<<v.x<<", "<<v.y<<", "<<v.z<<endl;
return mystream;
}

istream &operator >> (istream &mystream, Vector &v)
{
cout<<"Enter x, y, z: ";
mystream>>v.x>>v.y>>v.z;
return mystream;
}


#endif // VECTOR_H