Amadeus7 Δημοσ. 4 Ιουνίου 2009 Δημοσ. 4 Ιουνίου 2009 Χαιρετώ όλους τους προγραμματισταράδες του insomnia. Θέλω λίγη help αν μπορεί κάποιος, με ένα σφάλμα π μου πετιέται όταν κάνω compile μία εργασία π έχω στη σχολή. έχω την παρακάτω συναρτησούλα: > void computeAvgs(float *AvAge, float *AvWeight, float *AvEarLength, struct rabbit **A, int K, int N) { struct rabbit { int MonthBirth; int YearBirth; float Weight; float EarLength; int Age; float WeightToAge; }; void computeAvgs(float *AvAge, float *AvWeight, float *AvEarLength, struct rabbit **A, int K, int N) { int i, j; *AvAge=0; *AvWeight=0; *AvEarLength=0; for(i=0; i<K; i++) for(j=0; j<N; j++) { **** *AvAge+=*(*(A+i)+j)->Age; **** *AvWeight+=*(*(A+i)+j)->Weight; **** *AvEarlength+=*(*(A+i)+j)->EarLength; } i=N*K; *AvAge=*AvAge/i; *AvWeight=*AvWeight/i; *AvEarLength=*AvEarLength/i; } (υπολογίζει τελοσπάντων τον μέσο όρο τριών μετρήσεων που έχουν περαστεί σε έναν δισδιάστατο struct πίνακα) μου πετάει τρία errors εκεί π έχω τα **** και μ λέει: το gcc μου πετάει τα εξής >C_askis4.c:65: error: invalid type argument of ‘unary *’ (have ‘int’) C_askis4.c:66: error: invalid type argument of ‘unary *’ (have ‘float’) C_askis4.c:67: error: invalid type argument of ‘unary *’ (have ‘float’) έως τώρα πάντα παρέδιδα τις εργασίες με το ίδιο πρόβλημα, επειδή δεν ξέρω ακόμα να περνάω σωστά δισδιάστατους πίνακες σε συναρτήσεις ευχαριστώ για την όποια βοήθεια.
C6WGMN Δημοσ. 4 Ιουνίου 2009 Δημοσ. 4 Ιουνίου 2009 > **** *AvAge+=*(*(A+i)+j)->Age; 2 προβλήματα. Πρώτων ότι δεν καταλαβαίνω τι γυρεύουν τόσοι αστερίσκοι στην αρχή τις γραμμής (* *A είναι ίδιο με **A), και δεύτερον το rh του assignment είναι λάθος γραμματικά. > *(*(A + i) + j)->Age simenei A[j]->Age. Όμως το A[j] είναι struct rabbit, και όχι pointer. To -> είναι syntactic sugar για > a->b == a[0].b Αφού το [0] έρχεται πριν από το ., σημαίνει ότι παίρνει pointer/array. -> Χρησιμοποιείτε σε pointers και arrays από structure, αφού το . θέλει structure. Διόρθωσε το έτσι, > (*(*(A+i)+j)).Age
Amadeus7 Δημοσ. 4 Ιουνίου 2009 Μέλος Δημοσ. 4 Ιουνίου 2009 > **** *AvAge+=*(*(A+i)+j)->Age; no comment. εγώ αλλιως το έγραφα αλλά είδα πως στις σημειώσεις του καθηγητή μου έτσι το χρησιμοποιούσε και είπα να το γράψω μήπως είναι σωστό. ---------- Το μήνυμα προστέθηκε στις 13:27 ---------- άκυρο guys, είχα χρησιμοποιήσει όλους τους ακροβατικούς συνδιασμούς και όχι τον ποιό απλό. *AvAge+=Α[j].Age
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.