C++ 首先在这里定义
我的所有重载运算符都会出现错误“First Defined Here” 我没有在其他任何地方声明这些重载运算符,我无法了解发生了什么 我的代码(这是头文件):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); 私人
#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