Error: request for member - structs C  Το θέμα επιλύθηκε

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Error: request for member - structs C

Δημοσίευσηαπό clepto » 10 Ιαν 2014, 13:50

Καλησπέρα!

Κάνω μια άσκηση σε C και έχω το εξής πρόβλημα: όταν κάνω compile παίρνω δύο errors
Κώδικας: Επιλογή όλων
ask7.c: In function ‘Delete’:
ask7.c:36:23: error: request for member ‘data’ in something not a structure or union
ask7.c:37:22: error: request for member ‘next’ in something not a structure or union


το κομμάτι του κώδικα είναι το παρακάτω

Κώδικας: Επιλογή όλων

struct node
{
int data;
struct node *next;
};

int Delete(struct node **headRef) {
int value = 0;

if (*headRef != NULL) {
int value = *headRef->data;
*headRef = *headRef->next;
}

return value;
}


και η κλήση της Delete γίνεται ως εξής:

Κώδικας: Επιλογή όλων
struct node *list = NULL;
Delete(&list);


δεν μπορώ να καταλάβω γιατί συμβαίνει αυτό αφού άλλες συναρτήσεις δουλεύουν
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Error: request for member - structs C

Δημοσίευσηαπό konnn » 10 Ιαν 2014, 15:03

Για όρισε την node ως
Μορφοποιημένος Κώδικας: Επιλογή όλων
typedef struct  
{
.......

}node;


Είναι πιο σωστό.Μάλλον δεν είναι εκεί το λάθος αλλά θα δούμε.Θα θέλαμε να δούμε και τον άλλο κώδικα.
1 Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Προχωρημένος
2 Desktop : Ubuntu 16.04 64bit
a Intel Core i3 CPU 530 2.93GHz ‖ RAM 3824 MiB ‖ Intel DH55HC -
b nVidia Device [10de:1040] (rev a1)
c eth0: Intel 82578DC Gigabit Network Connection
3 Notebook : Ubuntu 16.04 64 bit
a Intel Core i3-2365M CPU @ 1.40GHz ‖ RAM 3854 MiB ‖ LENOVO 20197
b Intel 2nd Generation Core Processor Family Integrated Graphics Controller
c 5 wlan0: Intel Centrino Wireless-N 2230 ⋮ eth0: Realtek RTL8101E/RTL8102E

Αυτόματη υπογραφή.
Άβαταρ μέλους
konnn
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 3568
Εγγραφή: 12 Ιούλ 2010, 17:54
Τοποθεσία: Καλαμάτα
Launchpad: konnn
Εκτύπωση

Re: Error: request for member - structs C

Δημοσίευσηαπό clepto » 10 Ιαν 2014, 15:27

Πάλι το ίδιο...
Δεν μπορώ να δώσω όλο τον κώδικα γιατί αποτελεί λύση σε άσκηση εργαστηρίου.
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Error: request for member - structs C

Δημοσίευσηαπό konnn » 10 Ιαν 2014, 15:29

clepto έγραψε:int Delete(struct node **headRef)


Ωραία, αφαίρεσε τότε το ένα αστεράκι από την
Μορφοποιημένος Κώδικας: Επιλογή όλων
int Delete(struct node **headRef)
καθώς κ τροποποίησε ανάλογα το σώμα.
1 Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Προχωρημένος
2 Desktop : Ubuntu 16.04 64bit
a Intel Core i3 CPU 530 2.93GHz ‖ RAM 3824 MiB ‖ Intel DH55HC -
b nVidia Device [10de:1040] (rev a1)
c eth0: Intel 82578DC Gigabit Network Connection
3 Notebook : Ubuntu 16.04 64 bit
a Intel Core i3-2365M CPU @ 1.40GHz ‖ RAM 3854 MiB ‖ LENOVO 20197
b Intel 2nd Generation Core Processor Family Integrated Graphics Controller
c 5 wlan0: Intel Centrino Wireless-N 2230 ⋮ eth0: Realtek RTL8101E/RTL8102E

Αυτόματη υπογραφή.
Άβαταρ μέλους
konnn
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 3568
Εγγραφή: 12 Ιούλ 2010, 17:54
Τοποθεσία: Καλαμάτα
Launchpad: konnn
Εκτύπωση

Re: Error: request for member - structs C

Δημοσίευσηαπό Ilias95 » 10 Ιαν 2014, 15:53

Με μια πολύ γρήγορη ματιά έχω την εντύπωση ότι πρέπει να γίνει έτσι η Delete():

Κώδικας: Επιλογή όλων
int Delete(struct node *headRef) {
int value = 0;

if (headRef) {
value = headRef->data;
headRef = headRef->next;
}

return value;
}


PS. Γιατί Delete() και όχι delete() ή ακόμα καλύτερα list_delete()/list_destroy();
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Error: request for member - structs C

Δημοσίευσηαπό clepto » 10 Ιαν 2014, 15:56

δεν μπορώ να κάνω αυτές τις αλλαγές γιατί η άσκηση είναι ξεκάθαρη στον τρόπο που θέλει να γραφτούν οι συναρτήσεις αλλά και ποιες παραμέτρους θα παίρνουν
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Error: request for member - structs C

Δημοσίευσηαπό Ilias95 » 10 Ιαν 2014, 15:58

Εννοείς ότι η Delete() πρέπει να έχει την συγκεκριμένη declaration;
Κώδικας: Επιλογή όλων
int Delete(struct node **headRef)
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Error: request for member - structs C  Το θέμα επιλύθηκε

Δημοσίευσηαπό clepto » 10 Ιαν 2014, 16:04

Βρήκα το πρόβλημα!
Έπρεπε να γίνει έτσι (*headRef)->value
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Error: request for member - structs C

Δημοσίευσηαπό Ilias95 » 10 Ιαν 2014, 16:05

Μάλλον πρέπει να κάνεις την Delete κάπως έτσι:
Κώδικας: Επιλογή όλων
int Delete(struct node **headRef) {
int value = 0;

if (*headRef != NULL) {
value = (*headRef)->data;
*headRef = (*headRef)->next;
}

return value;
}


Και αντίστοιχα να αλλάξεις τον ορισμό της list.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση


Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι