C++代码实现向量类 Vector, 它有一个成员是维度 int dimension, 还有一个数组存了它的数据, 用运算符重载的方式实现两个向量之间的直积,即(x, y, z) * (a, b, c) = (x*a, y*b, z*c)这种形式,注意维度 int dimension . 向量维度是任意整数个。。。
运算符重载会吗?
两向量的直积会吗?
嗯,这个会,但是实现不了,能否贴出来让我看看?
@王传传: 你会哪个?
@Launcher: 。。。。。。。。。。原题比这个复杂,其他的都完成了,就还有一个直积没有实现。。。我看你也不会
@王传传: 就是你会“运算符重载”,但是不会计算两个向量的直积,对吗?
@Launcher: 运算符重载是要重载** 这个确实不会
@Launcher: @Launcher: 计算向量的直积,运算符重载是要重载哪个符号?
@王传传: friend Vector operator *(Vector &A,Vector &B)
@Launcher: 还是错的,我试过了, 一样的错
@王传传: 请把编译的错误提示给贴出来。
@Launcher:
@王传传: 你得学学英文,注意 1> 后面的描述,翻译成中文就是:无法解析的外部符号 "public: __thiscall Vector::~Vector(void)",该符号在方法 "class Vector __cdecl operator*(class Vector &,class Vector &)" 中被引用。
然后,还需要我针对上面的中文描述告诉你你的代码中的问题吗?
@Launcher: 嗯,问题就是出在这,原题要求求向量的点积,重载了*,但是求直积的时候还是重载*这个,肯定出问题,不知道怎么解决~
@Launcher:下面有我写的代码
@王传传: 我很遗憾,虽然我做了翻译吧,那我还是贴代码吧。
class Vector
{
pulbic:
~Vector();
friend Vector operator *(Vector &,Vector &);
}
Vector::~Vector()
{
}
Vector operator *(Vector &A,Vector &B)
{
Vector C;
for(int i=0;i<A.size;i++)
{
C.v[i]=A.v[i]*B.v[i];
C.size++;
}
return C;
}
@Launcher: 还是一样报错啊~~~
@Launcher: 按你的意思添加了析构函数,但是不顶用啊,报一样的错
@王传传:
class Vector { public: ~Vector(); friend Vector operator * (Vector &A, Vector &B); }; Vector::~Vector() { } Vector operator * (Vector &A, Vector &B) { Vector C; return C; }
就这段代码,我机器上编译没有问题,从语法上也没什么错误。针对的是你截图中提示的 Vector::~Vector(void) 是无法解析的引用的错误。
@Launcher: 这个还是没有实现~~~
@王传传: 你是说
class Vector
{
public:
~Vector();
friend Vector operator * (Vector &A, Vector &B);
};
Vector::~Vector()
{
}
Vector operator * (Vector &A, Vector &B)
{
Vector C;
return C;
}
在你的机器上编译不通过吗?
@Launcher: 嗯 是的
@ccwRadar: 那我没法帮你了,自己琢磨吧。
算法思路如下:(A为向量1的数组,B为向量2的数组,C取的结果数组)
1,定义个泛型/数组A,存放输入的向量1元素;泛型/数组B,存放输入的向量2元素.
2,定义个泛型/数组C,for循环取A[i]*B[j],结果放在数组C
3,最后打印输出即可。