0

我们刚刚开始研究 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”未定义”。我试图找到一种如何返回类对象的方法,但没有成功。有没有办法在没有任何指针的情况下返回类对象?或者,也许你看到了某种类型的小姐?我将不胜感激任何帮助!

4

2 回答 2

3

SujungtiMedziusMedisclass 而不是的成员函数static,它在您的Medis类的范围内。您必须使用类的实例来调用它Medis

于 2013-04-12T18:42:47.587 回答
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]);  
于 2013-04-12T18:45:11.493 回答