我们刚刚开始研究c ++中的类,我对在函数中返回类变量有一点疑问。这是代码:
#include <iostream>
#include <string>
using namespace std;
class Medis{
private:
int Aukstis;
int Storis;
int Amzius;
public:
Medis();
int GautiAuksti();
int GautiStori();
int GautiAmziu();
bool NustatytiAuksti(int);
bool NustatytiStori(int);
bool NustatytiAmziu(int);
Medis SujungtiMedzius(Medis M1, Medis M2){
Medis Grazinamas;
Grazinamas.Aukstis = M1.Aukstis + M2.Aukstis;
Grazinamas.Storis = M1.Storis + M2.Storis;
Grazinamas.Amzius = M1.Amzius + M2.Amzius;
return Grazinamas;
}
};
int Medis::GautiAuksti(){return Aukstis;}
int Medis::GautiStori(){return Storis;}
int Medis::GautiAmziu(){return Amzius;}
bool Medis::NustatytiAuksti(int n){
if (n >= 0){
Aukstis = n;
return true;
}else return false;
}
bool Medis::NustatytiStori(int n){
if (n >= 0){
Storis = n;
return true;
}else return false;
}
bool Medis::NustatytiAmziu(int n){
if (n >= 0){
Amzius = n;
return true;
}else return false;
}
Medis::Medis(){
Aukstis = 0;
Storis = 0;
Amzius = 0;
}
void main(){
Medis Berzas[3];
Berzas[0].NustatytiAuksti(10);
Berzas[0].NustatytiStori(50);
Berzas[0].NustatytiAmziu(23);
printf("Aukstis = %d; Storis = %d; Amzius = %d", Berzas[0].GautiAuksti(), Berzas[0].GautiStori(), Berzas[0].GautiAmziu());
Berzas[1].NustatytiAuksti(10);
Berzas[1].NustatytiStori(50);
Berzas[1].NustatytiAmziu(23);
printf("Aukstis = %d; Storis = %d; Amzius = %d", Berzas[1].GautiAuksti(), Berzas[1].GautiStori(), Berzas[1].GautiAmziu());
Berzas[2] = SujungtiMedzius(Berzas[0], Berzas[1]);
cin.get();
}
错误在后面的第三行。 Visual Studio强调了“SujungtiMedzius”(顺便说一句,我很遗憾变量不是英文),并说:“标识符”SujungtiMedzius“未定义”。我试图找到一种如何返回类对象的方法,但没有成功。有没有办法在没有任何指针的情况下返回一个类对象?或许你看到某种类型的错过?我会感激任何帮助!
答案 0 :(得分:3)
SujungtiMedzius
是Medis
类的成员函数,而不是static
,它属于Medis
类的范围。您必须使用Medis
类的实例调用它。
答案 1 :(得分:2)
SujungtiMedzius是Medis类的成员,所以你需要提供对象来调用函数,如
Berzas[2] = Berzas[0].SujungtiMedzius(Berzas[0], Berzas[1]);
通过它没有多大意义,因为你不使用Berzas [0]
中的任何数据或将SujungtiMedzius静态化并将其命名为
Berzas[2] = Medis::SujungtiMedzius(Berzas[0], Berzas[1]);
或者,这可能是最好的选择,让SujungtiMedzius只接受一个参数并使用来自对象的数据作为第二个应该变成类似
Berzas[2] = Berzas[0].SujungtiMedzius(Berzas[1]);