这可能看起来真的是一个愚蠢的问题,但我在过去的一个小时里一直在研究和举例子,还没有找到解释,所以我不妨在这里继续寻找。
为什么它可以正常工作并正确编译:
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <math.h>
using namespace std;
class Fraccao{
int denominador;
public:
int numerador;
Fraccao(int N = 0, int D = 1);
void ChangeND(int N, int D);
Fraccao operator*(Fraccao const &Frac){
Fraccao FTemp;
FTemp.numerador = this->numerador * Frac.numerador;
FTemp.denominador = this->denominador * Frac.denominador;
return FTemp;
}
};
int main(){
Fraccao F1(1, 2);
Fraccao F2(3);
Fraccao F3(3, 4);
F1 = F2*F3;
cout << F1.numerador;
}
Fraccao::Fraccao(int N, int D){
numerador = N;
if(D > 0){
denominador = D;
}else{
denominador = 1;
}
cout << "Fraccao " << numerador << "/" << denominador << " criada." << endl;
}
void Fraccao::ChangeND(int N, int D){
numerador = N;
if(D > 0){
denominador = D;
}else{
denominador = 1;
}
}但这不是:
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <math.h>
using namespace std;
class Fraccao{
int denominador;
public:
int numerador;
Fraccao(int N = 0, int D = 1);
void ChangeND(int N, int D);
Fraccao operator*(Fraccao const &Frac);
};
int main(){
Fraccao F1(1, 2);
Fraccao F2(3);
Fraccao F3(3, 4);
F1 = F2*F3;
cout << F1.numerador;
}
Fraccao::Fraccao(int N, int D){
numerador = N;
if(D > 0){
denominador = D;
}else{
denominador = 1;
}
cout << "Fraccao " << numerador << "/" << denominador << " criada." << endl;
}
void Fraccao::ChangeND(int N, int D){
numerador = N;
if(D > 0){
denominador = D;
}else{
denominador = 1;
}
}
Fraccao::operator *(const Fraccao& Frac){
Fraccao FTemp;
FTemp.numerador = this->numerador * Frac.numerador;
FTemp.denominador = this->denominador * Frac.denominador;
return FTemp;
}我在代码的第二次迭代中遇到的问题是:如果我将操作符重载移到类之外,那么尽管是原型,它也无法工作。
发布于 2021-01-07 22:51:37
运算符定义中缺少返回类型:
Fraccao::operator *(const Fraccao& Frac){ 应该是
Fraccao Fraccao::operator *(const Fraccao& Frac){https://stackoverflow.com/questions/65580003
复制相似问题