Функция друга в C ++ показывает «переменную или объявленную пустую ошибку» - PullRequest
0 голосов
/ 01 марта 2019

Я делаю этот код для своей лаборатории ООП, и у меня возникает следующая проблема, я пробовал много вещей, но все тщетно:

   #include<iostream>
using namespace std;
void ad(&mt &ft){
    mt.m=mt.m+(mt.c/100);
    ft.f=ft.f+(ft.i/12);
    if(t==0){
        m=mt.m+(ft.f/3.281);
        m=round(m);
        c=(int)(m%100);
        m=(int)(m/100);
    }
    else if(t==1){
        f=ft.f+(mt.m*3.281);
        f=round(f);
        i=(int)(f%12);
        f=(int)(f/12);
    }
}
class dm{
    private:
        float m,c;
        int t=0;
    public:
    void get(){
        cout<<"\nEnter the distance in metres and centimeteres:\t";
        cin>>m>>c;
    }
    void display(){
        cout<<"\nThe distance stored is:\t"<<m<<" meters "<<c<<" centimeters.";
    }   
    friend void ad(dm db);  
};
class db{
    private:
        float f,i;
        int t=1;
    public:
    void get(){
        cout<<"\nEnter the distance in feet and inches:\t";
        cin>>f>>i;
    }   
    void display(){
        cout<<"\nThe distance stored is:\t"<<i<<" feet "<<f<<" inches.";
    }
    friend void ad(dm db);
};
float round(float var){
    float value = (int)(var * 100 + .5); 
    return (float)value / 100; 
}
int main(){
dm dm1, dm2;
db db1, db2;
dm1.get();
db1.get();
dm2.add(dm1 db1);
db2.add(dm1 db1);   
dm2.display();
db2.display();
return 0;
}

Я получаю следующие Ошибки :

variable or field 'ad' declared void
'mt' was not declared in this scope
'ft' was not declared in this scope

пожалуйста, помогите, заранее спасибо

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Я переписал код наподобие:

    #include<iostream>
using namespace std;
class db;
class dm{
    float mt,cm;
    public:
    void getdata() 
      { 
        cout<<"CLASS DM: \n\n"; 
        cout<<"Enter Values for metres : "; 
        cin>>mt; 
        cout<<"Enter Values for centimetres: "; 
        cin>>cm; 
      } 
    void display()
    {
        cout<<"\nTotal value of distance is : "<<mt<<" meters "<<cm<<" centimeters.";
    } 
    friend dm add(dm, db); 
    friend db add(db, dm);
};
class db{
    float ft,in;
    public:
    void getdata() 
      { 
        cout<<"CLASS DB: \n\n"; 
        cout<<"Enter Values for feet : "; 
        cin>>ft; 
        cout<<"Enter Values for inches: "; 
        cin>>in; 
      } 
    void display()
    {
        cout<<"\nTotal value of distance is : "<<ft<<" feet "<<in<<" inches.";
    } 
    friend dm add(dm, db);
    friend db add(db, dm); 
};
dm add(dm a, db b){
        dm temp;
        temp.cm=a.cm + (a.mt*100) + (b.ft*30.48) + (b.in*2.54);
        temp.mt=(int)(temp.cm/100);
        temp.cm=(int)(temp.cm-(temp.mt*100));
        return (temp);
}
db add (db b, dm a){
        db temp;
        temp.in=b.in + (b.ft*12) + (a.mt*39.37) + (a.cm*2.54);
        temp.ft=(int)(temp.in/12);
        temp.in=(int)(temp.in-(temp.ft*12));
        return (temp);
}
int main(){
    dm dm1, dm2;
    db db1, db2;
    db1.getdata();
    dm1.getdata();
    dm2=add(dm1, db1);
    db2=add(db1, dm1);
    dm2.display();
    db2.display();
    return 0;
}

Ошибки устранены и теперь работают нормально, Спасибо всем за помощь

0 голосов
/ 01 марта 2019

Ваша полная программа полна синтаксиса и логических ошибок.Сначала прочитайте, как передается объект и какова область действия переменной в c ++.Затем вы поймете ошибки, которые вы совершили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...