Επισκέπτης Δημοσ. 14 Απριλίου 2021 Δημοσ. 14 Απριλίου 2021 Παρακάτω θα δείτε 2 κώδικες και για κάποιον λόγο δεν τρέχουν και δεν μου εμφανίζει το dev τον λόγο που δεν τρέχουν όποιος μπορεί help Header files: #include <iostream> using namespace std; class Student { private: int hli; int xrspou; int vath; public: Student(int hli, int xrspou, int vath) { student(hli, xrspou, vath); } void student(int hli, int xrspou, int vath) { hli=24; xrspou=7; vath=25; } int gethli() { return hli; } int getxrspou() { return xrspou; } int getvath() { return vath; } }; constructor: #include <iostream> using namespace std; class Student { public: int hli,xrspou,vath; Student::Student( int h, int x, int v ) { hli=h; xrspou=x; vath=v; } }; int main() { student.hli=24; student.xrspou=7; student.vath=25; cout << student.hli << " " << student.xrspou << " " << student.vath << "\n"; return 0; }
kaliakman Δημοσ. 14 Απριλίου 2021 Δημοσ. 14 Απριλίου 2021 (επεξεργασμένο) Αρχικά δεν ισχύει ότι δεν σου βγάζει error το περιβάλλον που χρησιμοποιείς. Ίσως να μην καταλαβαίνεις απλά τι σου λέει. Ας τα πάρουμε από την αρχή: void foo(int bar); Αυτό ονομάζεται declaration δηλαδή απλά δηλώνεις ότι υπάρχει μια συνάρτηση με το τάδε όνομα(εδώ foo) που παίρνει τα τάδε ορίσματα(εδώ bar) και γυρνάει το τάδε (εδώ void). Αυτά μπαίνουν στα header files. void foo(int bar){ // do something } Αυτό λέγεται definition δηλαδή ορίζω τι κάνει μια συνάρτηση. Αυτά μπαίνουν στα source files. Προφανώς δεν απαντάω στο ερώτημα σου αλλά καταλαβαίνω ότι δεν έχεις αυτές τις γνώσεις που είναι αναγκαίες. Με αυτά μπορείς να βρεις κάποια λάθη στον δικό σου κώδικα; Επεξ/σία 14 Απριλίου 2021 από kaliakman 1
Επισκέπτης Δημοσ. 14 Απριλίου 2021 Δημοσ. 14 Απριλίου 2021 1 λεπτό πριν, kaliakman είπε Στα header files βάζεις μόνο declarations και όχι definitions. Στα source files/.cpp βάζεις τα definitions. δεν κατάλαβα
kaliakman Δημοσ. 14 Απριλίου 2021 Δημοσ. 14 Απριλίου 2021 15 λεπτά πριν, vense97 είπε δεν κατάλαβα Δες το πάλι.
Επισκέπτης Δημοσ. 14 Απριλίου 2021 Δημοσ. 14 Απριλίου 2021 23 λεπτά πριν, kaliakman είπε Αρχικά δεν ισχύει ότι δεν σου βγάζει error το περιβάλλον που χρησιμοποιείς. Ίσως να μην καταλαβαίνεις απλά τι σου λέει. Ας τα πάρουμε από την αρχή: void foo(int bar); Αυτό ονομάζεται declaration δηλαδή απλά δηλώνεις ότι υπάρχει μια συνάρτηση με το τάδε όνομα(εδώ foo) που παίρνει τα τάδε ορίσματα(εδώ bar) και γυρνάει το τάδε (εδώ void). Αυτά μπαίνουν στα header files. void foo(int bar){ // do something } Αυτό λέγεται definition δηλαδή ορίζω τι κάνει μια συνάρτηση. Αυτά μπαίνουν στα source files. Προφανώς δεν απαντάω στο ερώτημα σου αλλά καταλαβαίνω ότι δεν έχεις αυτές τις γνώσεις που είναι αναγκαίες. Με αυτά μπορείς να βρεις κάποια λάθη στον δικό σου κώδικα; Φταίω που δεν τα μαθαίνω έτσι...εγώ λέω απλός δηλώνω την συνάρτηση με void και το άλλο απλός ότι την δημιουργώ..δεν τα λέω declaration και definition είναι κακό το ξέρω
kaliakman Δημοσ. 14 Απριλίου 2021 Δημοσ. 14 Απριλίου 2021 4 λεπτά πριν, vense97 είπε Φταίω που δεν τα μαθαίνω έτσι...εγώ λέω απλός δηλώνω την συνάρτηση με void και το άλλο απλός ότι την δημιουργώ..δεν τα λέω declaration και definition είναι κακό το ξέρω Τα ονόματα δεν έχουν σημασία σε αυτό το σημείο. Ξαναλέω δεν έχεις καταλάβει τι σημαίνουν όπως και αν τα λες. Μπορείς να λες Μήτσο και Κώστα. Μπορείς να βρεις σημεία στο δικό σου κώδικα που δεν κάνει αυτό που περιγράφω στο αρχικό μήνυμα; (Διαχωρισμός των δυο αυτών εννοιών στα διαφορετικά αρχεία)
Επισκέπτης Δημοσ. 14 Απριλίου 2021 Δημοσ. 14 Απριλίου 2021 8 λεπτά πριν, kaliakman είπε Τα ονόματα δεν έχουν σημασία σε αυτό το σημείο. Ξαναλέω δεν έχεις καταλάβει τι σημαίνουν όπως και αν τα λες. Μπορείς να λες Μήτσο και Κώστα. Μπορείς να βρεις σημεία στο δικό σου κώδικα που δεν κάνει αυτό που περιγράφω στο αρχικό μήνυμα; (Διαχωρισμός των δυο αυτών εννοιών στα διαφορετικά αρχεία) μου απαντησε και ο καθηγητης και με μπερδεψε περισσοτερο.....
kaliakman Δημοσ. 14 Απριλίου 2021 Δημοσ. 14 Απριλίου 2021 1 λεπτό πριν, vense97 είπε μου απαντησε και ο καθηγητης και με μπερδεψε περισσοτερο..... Έχεις γράψει 3 μηνύματα χωρίς περιεχόμενο. Αν θέλεις βοήθεια προσπάθησε λίγο.
Επισκέπτης Δημοσ. 14 Απριλίου 2021 Δημοσ. 14 Απριλίου 2021 2 λεπτά πριν, kaliakman είπε Έχεις γράψει 3 μηνύματα χωρίς περιεχόμενο. Αν θέλεις βοήθεια προσπάθησε λίγο. εαν θες μπορω να σου στείλω την εκφώνηση
kaliakman Δημοσ. 14 Απριλίου 2021 Δημοσ. 14 Απριλίου 2021 9 λεπτά πριν, vense97 είπε εαν θες μπορω να σου στείλω την εκφώνηση Καλή τύχη.
Lanike71 Δημοσ. 14 Απριλίου 2021 Δημοσ. 14 Απριλίου 2021 Καραντίνα έχουμε...Φτιάχνεις καφεδάρα το πρωί, βάζεις youtube βιντεάρα, ίσως και ο new boston να έχει σειρά για c++, αράζεις στην καρεκλάρα και μαθαίνεις... Ειλικρινά, πιο εύκολος τρόπος να μάθεις τα βασικά, αμφιβάλλω αν υπάρχει.
Ponous Δημοσ. 25 Απριλίου 2021 Δημοσ. 25 Απριλίου 2021 Για μένα ένας από τους καλύτερους youtubers σε C++ είναι o TheCherno. C++ playlist. Θα βρεις ένα βίντεο όπου εξηγεί τι κάνουν τα header files Ουσιαστικά αυτό που φαίνεται ότι κάνεις είναι ότι χρησιμοποιείς τα header files λάθος. Όταν δημιουργείς συναρτήσεις, τις δημιουργείς γιατί θες να τις καλέσεις σε διάφορα μέρη του κώδικα σου. Για να μπορεί όμως ο compiler να γνωρίζει ότι δημιούργησες μια συνάρτηση και την έχεις κάπου μέσα στον κώδικα σου θα πρέπει να την δηλώσεις (δλδ declaration) πάνω ψηλά. Καμιά φορά οι σύγχρονοι compilers βρίσκουν τις συναρτήσεις που έγραψες αλλά αυτό δεν συμβαίνει πάντα (ούτε πρέπει για να λέμε την αλήθεια). Όπως αναφέρθηκε και πιο πάνω ένα declaration δεν περιέχει υλοποίηση. Εξού και στα header files, συνήθως δεν βάζεις κάτι άλλο πέραν από declarations. Αν δεις στο δικό σου το header file επιστρέφεις τιμές, αναθέτεις τιμές σε μεταβλητές κτλπ. Σαν να μην φτάνει αυτό έχεις την ίδια συνάρτηση σε άλλο αρχείο. Εδώ ο compiler θα παραπονεθεί διότι έχεις δύο συναρτήσεις με το ίδιο όνομα στο ίδιο πρόγραμμα, δημιουργία κλάσης με το ίδιο όνομα.... Ως επίσης, στον "constructor", δεν κάνεις import to header file και κάποιες τιμές όπως hli για παράδειγμα λείπουν από την κλάση που όρισες στον constructor. Άποψη μου, σε 4-5 προτάσεις δεν θα καταλάβεις και πολλά για ένα θέμα που χρειάζεται ολόκληρο κεφάλαιο για να εξηγηθεί. Δες αυτό πρώτα. Στη συνέχεια δες για κλάσεις από το ίδιο playlist. Κι άμα κάτι δεν κατάλαβες το ξανασυζητάμε.
k33theod Δημοσ. 26 Απριλίου 2021 Δημοσ. 26 Απριλίου 2021 Κανονικά στο header file βάζεις μόνο το declaration των κλάσεων και μεθοδών και συναρτήσεων klp. Δηλαδή το δικό σου είναι αυτό student.h #pragma once class Student { private: int hli; int xrspou; int vath; public: Student(int, int, int); int gethli(); int getxrspou(); int getvath(); }; Στο .cpp με το ίδιο όνομα βάζεις το implementation δηλαδή το student.cpp είναι κάπως έτσι #include "student.h" Student::Student(int a, int b, int c) { hli = a; xrspou = b; vath = c; } int Student::gethli() { return hli; } int Student::getxrspou() { return xrspou; } int Student::getvath() { return vath; } και στη main.cpp εισάγεις το header είναι δηλαδή κάπως έτσι #include <iostream> #include "student.h" using namespace std; int main() { Student stud {24,7,25}; cout << stud.gethli() << " " << stud.getxrspou() << " " << stud.getvath() << "\n"; return 0; } Το pragma once να το χρησιμοποιείς πάντα γιατί όπως βλέπεις το .h γίνεται include σε 2 αρχεία και μπορεί να γίνει σε περισσότερα. τις ιδιότητες τις δήλωνεις private οπότε μπορείς να τις πάρεις μόνο μέσω των μεθόδων και όχι με stud.hli που θες να το κάνεις.
kaliakman Δημοσ. 26 Απριλίου 2021 Δημοσ. 26 Απριλίου 2021 Δεν ξέρω πόσο βοηθητικό είναι να δίνεις έτοιμη την λύση ενώ φαίνεται οτι εδώ υπάρχει σοβαρό πρόβλημα. Απλά θα κολλήσει πάλι στο επόμενο πρόβλημα. Υ.Γ. Το #pragma once καλό είναι να αποφεύγεται καθώς δεν είναι του standard.
k33theod Δημοσ. 26 Απριλίου 2021 Δημοσ. 26 Απριλίου 2021 6 ώρες πριν, kaliakman είπε Δεν ξέρω πόσο βοηθητικό είναι να δίνεις έτοιμη την λύση ενώ φαίνεται οτι εδώ υπάρχει σοβαρό πρόβλημα. Απλά θα κολλήσει πάλι στο επόμενο πρόβλημα. Έχεις δίκιο, δεν μου φάνηκε για normal άσκηση άλλα για μια προσπάθεια να καταλάβει πως δουλεύει. Είπα να δώσω μια ώθηση μήπως και βοήθησω. Για το #pragma once έχεις δίκιο αλλά εάν έγγραφα αυτό το if not defined define endif θα ήταν too much. Επίσης @vense97 υπάρχουν εκτός από βίντεο πολύ ωραία tutorials που εξηγούν πως γίνονται τα πράγματα. 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα