gpt4 book ai didi

c++ - 有趣的问题运算符重载

转载 作者:太空宇宙 更新时间:2023-11-04 12:02:17 25 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
Operator overloading
What causes C++ compiler error: must have argument of class or enumerated type?

我正在尝试使用 C++ 中的运算符重载和通用性,尝试编译时似乎出现了 3 个小错误。有一个名为 Grandeur 的类和模板 D,然后我从这个继承了 3 个类,分别命名为 Temps(time)Longueur(size)Vitesse(speed ),并且我正在尝试重载运算符,例如当我执行 Temps+Temps->Temps, Vitesse+Vitesse=Vitesse,Longueur+Longueur->Longueur, Longueur/Time->Vitess等为了不为相同类型的操作编写 3 次相同的函数,我使用模板来利用通用性。但是当我尝试编译时出现错误。这是我的代码:

typedef double Longueur;
typedef double Temps;
typedef double Vitesse;



template<typename D>
class Grandeur {
protected :
double val; const char* unite;



public :
Grandeur(double qqc) : val(qqc) {}
Grandeur(int qqc) : val(qqc) {}
Grandeur(long qqc) : val(qqc) {}
Grandeur(float qqc) : val(qqc) {}

inline friend D operator+ (const D a, const D b) {
return D (a.val + b.val);
}

inline friend D operator- (const D a, const D b) {
return D (a.val - b.val);
}

inline friend double operator* (const D a, const D b) {
return a.val * b.val;
}

inline friend double operator/ (const D a, const D b) {
return a.val / b.val;
}

inline friend D operator* (D a, const int b) {
return D (a.val * b);
}

inline friend D operator/ (const D a, const int b) {
return D (a.val / b);
}

inline friend ostream& operator<< (ostream& os, D d) {
return os << d.val << d.u;
}

class Temps : public Grandeur<Temps> {
public:


};

class Vitesse : public Grandeur<Vitesse> {
public:


};

class Longueur : public Grandeur<Longueur> {
public:

};

};




inline Longueur operator* (const Vitesse v, const Temps t) {
return Longueur(v.val * t.val);
}

inline Vitesse operator/ (const Longueur l, const Temps t) {
return Vitesse(l.val / t.val);
}

inline Temps operator/ (const Longueur l, const Vitesse v) {
return Temps(l.val / v.val);
}

当我尝试编译时它说:

g++ essai.cc
In file included from essai.cc:4:0:
grandeurs.h:70:58: error: ‘Longueur operator*(Vitesse, Temps)’ must have an argument of class or enumerated type
grandeurs.h:74:58: error: ‘Vitesse operator/(Longueur, Temps)’ must have an argument of class or enumerated type
grandeurs.h:78:58: error: ‘Temps operator/(Longueur, Vitesse)’ must have an argument of class or enumerated type

第 70、74 和 78 行是具有最后 3 个函数(内联)的行。我能做什么?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com