κλάση σφάλματος προς τα εμπρός δήλωση

ψήφοι
0

Κάνω ένα πρόγραμμα για να μετατρέψετε τα πόδια στο μέτρο και το αντίστροφο. Έχω χρησιμοποιώντας τις κατηγορίες και τις μετατροπές τύπου. δύο λειτουργίες μετατροπής (χρησιμοποιώντας κατασκευαστή) χρησιμοποιούν τα μέλη των άλλων class.So i χρησιμοποιούνται τα εμπρός δήλωση της κατηγορίας ΠΟΔΙΑ

#include<iostream>
#include<conio.h>
using namespace std;
class FEET;
class MEETER
{
int mtr;
double cm;
public:
MEETER()
{
    mtr=0;
    cm=0;
}
void getdata();
void display();
int get_mtr()
{
    return(mtr);
}
double get_cm()
{
    return(cm);
}
MEETER(FEET f)
{
    int feet=f.get_feet();
    double inch=f.get_inch();
    inch+=feet*12;
    cm=inch*2.54;
    mtr=int(cm)/100;
    cm=cm-(mtr*100);
}
~MEETER()
{
}
};
class FEET
{
int ft;
double in;
public:
FEET()
{
    ft=0;
    in=0;
}
void getdata();
void display();
int get_feet()
{
    return(ft);
}
double get_inch()
{
    return(in);
}
FEET(MEETER f)
{
    int mtr=f.get_mtr();
    double cm=f.get_cm();
    cm+=mtr*100;
    in=cm/2.54;
    ft=int(in)/12;
    cm=cm-(ft*12);
}
~FEET()
{
}
};
void MEETER::getdata()
{
cout<<\nEnter length in meter and centimeter\n;
cin>>mtr>>cm;
}
void MEETER::display()
{
 cout<<\n<<mtr<<m <<cm<<cm\n;
}
void FEET::getdata()
{
 cout<<\nEnter length in feet and inch\n;
 cin>>ft>>in;
}
void FEET::display()
{
 cout<<\n<<ft<<\<<in<<\n;
}
int main()
{
FEET f1,f2;
MEETER m1,m2;
f1.getdata();
m1=f1;
m2.getdata();
f2=m2;
f1.display();
m1.display();
f2.display();
m2.display();
getch();
return(0);
}

Αλλά το πρόγραμμα εμφανίζει το σφάλμα ως εξής:

1>------ Build started: Project: Type_Length, Configuration: Debug Win32 ------
1>  source.cpp
1>g:\abhi\type_length\type_length\source.cpp(27): error C2027: use of undefined type 'FEET'
1>          g:\abhi\type_length\type_length\source.cpp(4) : see declaration of 'FEET'
1>g:\abhi\type_length\type_length\source.cpp(27): error C2228: left of '.get_feet' must have class/struct/union
1>g:\abhi\type_length\type_length\source.cpp(28): error C2027: use of undefined type 'FEET'
1>          g:\abhi\type_length\type_length\source.cpp(4) : see declaration of 'FEET'
1>g:\abhi\type_length\type_length\source.cpp(28): error C2228: left of '.get_inch' must have class/struct/union
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Βοήθησέ με να το διορθώσετε

Δημοσιεύθηκε 12/10/2014 στις 05:49
χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
0

Αυτό θα πρέπει να απαντήσω στην ερώτησή σας: Πότε μπορώ να χρησιμοποιήσω μια προς τα εμπρός δήλωση;

Από εκεί:

Τι δεν μπορείς να κάνεις με μια ημιτελή τύπο:

  • Καθορισμός λειτουργίες ή μέθοδοι που χρησιμοποιούν αυτόν τον τύπο

    void f1(X x) {} // compiler error!
    X f2() {} // compiler error!

Το σφάλμα οφείλεται σε σας MEETER(FEET f) { ... }γραμμή

Απαντήθηκε 12/10/2014 στις 05:52
πηγή χρήστη

ψήφοι
1

Έτσι, έχετε δηλώσει προς τα εμπρός τάξη τα πόδια σας, που σημαίνει compiler ξέρει ότι τα πόδια είναι μερικά οριστεί από το χρήστη τύπο δεδομένων.

Αλλά αργότερα σας κάνουν somethng όπως αυτό στην τάξη MEETER σας

MEETER(FEET f)

δηλαδή που αναγκάζουν compiler να προβλέψει το μέγεθος των ποδιών τάξης που δεν έχετε ορίσει μέχρι ακόμα. Γι 'αυτό διαμαρτύρεται.

Για να πάρετε γύρω από αυτό, μπορείτε να χρησιμοποιήσετε το δείκτη στα πόδια της κατηγορίας MEETER σας, δεδομένου ότι δεν θα αναγκάσει compiler να ξέρετε για το μέγεθος των ποδιών τάξη σας.

MEETER(FEET* f)

Επίσης, απαγορεύει τη χρήση τίποτα σε αυτή τη λειτουργία ειδικά για την κατηγορία ΠΟΔΙΑ που εξουσιοδοτεί compiler να γνωρίζει τον ορισμό της τάξης σας.

Απαντήθηκε 12/10/2014 στις 05:56
πηγή χρήστη

ψήφοι
0

Το σφάλμα παρουσιάζεται επειδή ο compiler δεν έχει τον ορισμό της κατηγορίας FEETπου χρησιμοποιείται στον ορισμό του κατασκευαστή

MEETER(FEET f)
{
    int feet=f.get_feet();
    double inch=f.get_inch();
    inch+=feet*12;
    cm=inch*2.54;
    mtr=int(cm)/100;
    cm=cm-(mtr*100);
}

Θα πρέπει να κηρύξει τον κατασκευαστή στον ορισμό κατηγορία MEETERκαι να καθορίσει το έξω από την τάξη μετά τον ορισμό της κατηγορίαςFEET

Για παράδειγμα

class MEETER
{
    MEETER(FEET f);
    // other members
};

class (FEET
{
    // its members
};

MEETER::MEETER(FEET f)
{
    int feet=f.get_feet();
    double inch=f.get_inch();
    inch+=feet*12;
    cm=inch*2.54;
    mtr=int(cm)/100;
    cm=cm-(mtr*100);
}

Το ίδιο θα πρέπει να γίνει με τον κατασκευαστή της κλάσης ΠΟΔΙΑ

FEET(MEETER f)
{
    int mtr=f.get_mtr();
    double cm=f.get_cm();
    cm+=mtr*100;
    in=cm/2.54;
    ft=int(in)/12;
    cm=cm-(ft*12);
}

Αυτό είναι, θα πρέπει να δηλωθούν στην τάξη FEET και ορίζεται έξω από την τάξη μετά θα καθοριστούν οι δύο τάξεις.

Απαντήθηκε 12/10/2014 στις 06:15
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more