Anjuta και g++

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

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

Re: Anjuta και g++

Δημοσίευσηαπό medigeek » 11 Ιουν 2011, 13:46

Μα κι εγώ το δοκίμασα, αλλά δε δουλεύει το πρόγραμμα που έστειλε, υποθέτω ότι αυτό που γύρευε είναι το βήμα 4 για να ενώσει δύο .cc αρχεία
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Anjuta και g++

Δημοσίευσηαπό demosthenesk » 12 Ιουν 2011, 01:57

Καταρχήν ευχαριστώ και τους δυο σας που αφιερώσατε χρόνο πάνω σε αυτό το ζήτημα.

Δοκίμασα και τους δυο τρόπους και δουλεύουν και οι δύο.

Ερωτήσεις τώρα.
Στον 1ο τρόπο τι έφταιγε και είχε χαλάσει το project? και έπρεπε να κάνω άλλο και add τα αρχεία;

Στον 2ο τρόπο, όλα καλά το build είναι επιτυχές αλλά από το ide δεν τρέχει το executable, μόνο από τερματικό. Μήπως το Anjuta είναι κάπως ασταθές;

Έβαλα και το Code::Blocks να δοκιμάσω και μου το έτρεξε με την μια τον πρόγραμμα.

Έχετε εμπειρία με το Anjuta από αρκετό διάστημα προγραμματισμού ώστε να σχολιάσετε αν είναι καλό/ασταθές κτλ;
Γνώσεις ⇛ Linux: Πολύ Καλό ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Μέτρια
Λειτουργικό: Ubuntu 10.04 LTS σε Fujitsu Siemens Amilo M6450
Προδιαγραφές ⇛ Intel(R) Pentium(R) M processor 1.70GHz │ 1,268 Gb │ Intel Corporation Mobile 915GM/GMS/910GML Express │ Intel Corporation PRO/Wireless 2200BG [Calexico2] │ - │ Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition │ Intel Corporation Mobile 915GM/GMS/910GML Express 1280X768
Άβαταρ μέλους
demosthenesk
punkTUX
punkTUX
 
Δημοσιεύσεις: 199
Εγγραφή: 09 Ιαν 2010, 17:39
Εκτύπωση

Re: Anjuta και g++

Δημοσίευσηαπό simosx » 12 Ιουν 2011, 14:18

demosthenesk έγραψε:
Ερωτήσεις τώρα.
Στον 1ο τρόπο τι έφταιγε και είχε χαλάσει το project? και έπρεπε να κάνω άλλο και add τα αρχεία;


Δεν ξέρω με ποιο τρόπο πρόσθεσες τα αρχεία στην αρχή. Υποθέτω ότι τα πρόσθεσες σε διαφορετικό κατάλογο από αυτόν που έπρεπε (src/).
Όταν φόρτωσα το δικό σου έργο ανέφερε ότι δε βρήκε το αρχείο GradeBook (έτσι λεγόταν;).
Σε όλα αυτά μπορείς να δεις το αρχείο έργου (project file) και να διαπιστώσεις που νόμιζε ότι πρέπει να είναι το GradeBook.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Anjuta και g++

Δημοσίευσηαπό demosthenesk » 12 Ιουν 2011, 15:05

Ναι έτσι λεγόταν.

Να σου πω τι έγινε.
1) Κάνω στην αρχή ένα νέο generic c++ project κανονικά.
2) Γράφω τον κώδικα σωστά και πάω να κάνω compile και δεν κάνει.
3) Μετά όταν είπατε να μετονομάσω τα αρχεία σε cpp έσβησα από το Nautilus τα αρχεία *.cc και έκανα επικόλληση από άλλο φάκελο (backup) τα *.cpp.
Διότι η διαχείριση των αρχείων από το Anjuta είναι περίεργη, δεν έβρισκα από που κάνεις delete/rename :problem: ένα αρχείο του project.
4) Τα έκανα add αλλά το Anjuta ήθελε τα *.cc. Προφανώς είχε κρατήσει τα path στο project.
5) Οπότε μετά δεν δούλευε διότι δεν έβρισκε τα αρχεία *.cc.

Πέρα από το βήμα 3) που δημιούργησε το λάθος με τα αρχεία, δεν μπορώ να καταλάβω γιατί με το που έγραψα το πρόγραμμα δεν γινόταν compile.
Διότι και με του που έκανα add τα αρχεία δεν άλλαξα τον κώδικα. Μόνο add έκανα.

Τέσπα, σας ευχαριστώ.
Γνώσεις ⇛ Linux: Πολύ Καλό ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Μέτρια
Λειτουργικό: Ubuntu 10.04 LTS σε Fujitsu Siemens Amilo M6450
Προδιαγραφές ⇛ Intel(R) Pentium(R) M processor 1.70GHz │ 1,268 Gb │ Intel Corporation Mobile 915GM/GMS/910GML Express │ Intel Corporation PRO/Wireless 2200BG [Calexico2] │ - │ Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition │ Intel Corporation Mobile 915GM/GMS/910GML Express 1280X768
Άβαταρ μέλους
demosthenesk
punkTUX
punkTUX
 
Δημοσιεύσεις: 199
Εγγραφή: 09 Ιαν 2010, 17:39
Εκτύπωση

Re: Anjuta και g++

Δημοσίευσηαπό demosthenesk » 04 Οκτ 2011, 20:07

Μετά από τόσο καιρό όσο είναι αυτά τα (προηγούμενα) ποστ αποφάσισα να ασχοληθώ με την C++ και να στρώσω τον ... κάτω και να την μάθω.
Ακόμη είμαι στην αρχή οπότε ευχηθείτε μου καλή αρχή και καλή επιμονή να τελειώσω το βιβλίο και να συνεχίσω να μαθαίνω.

Με αφορμή αυτό το παράδειγμα θέλω να συζητήσουμε κάτι που παρατήρησα.
Στο βιβλίο που διαβάζω αναφέρει την τεχνική να διαχωρίζουμε το interface από το implementation μιας κλάσης.

Για παράδειγμα στο interface γράφουμε ΤΙ κάνει η κλάση ενώ στην υλοποίηση ΠΩΣ το κάνει.
Για παράδειγμα ας πούμε ότι έχω την κλάση GradeBook με τον παρακάτω κώδικα
Κώδικας: Επιλογή όλων

#include <iostream>
#include <string>
using namespace std;


class GradeBook
{
private:
string courseName;

public:
GradeBook (string name) //constructor
{
setCourseName(name);
}

void setCourseName (string name)
{
courseName = name;
}

string getCourseName()
{
return courseName;
}

void displayMessage()
{
cout << "Welcome to the GradeBook for\n" << getCourseName() << "!\n";
}
};


Αυτήν την κλάση την διαχωρίζουμε σε GradeBook.h ως το interface και GradeBook.cc ως την υλοποίηση.

GradeBook.h
Κώδικας: Επιλογή όλων
#include <string>
using namespace std;

class GradeBook
{
private:
string courseName;

public:
GradeBook(string);
void setCourseName (string);
string getCourseName();
void displayMessage();
};



GradeBook.cc
Κώδικας: Επιλογή όλων
#include <iostream>
#include "GradeBook.h"
using namespace std;

GradeBook::GradeBook (string name) //constructor
{
setCourseName(name);
}

void GradeBook::setCourseName (string name)
{
courseName = name;
}

string GradeBook::getCourseName()
{
return courseName;
}

void GradeBook::displayMessage()
{
cout << "Welcome to the GradeBook for\n" << getCourseName() << "!\n";
}


Πάνω σε αυτήν την τεχνική θέλω να επισημάνω κάποια θέματα.

1ον) Μου φαίνεται περιττή. Διότι στην υλοποίηση ξανα δηλώνουμε τις μεθόδους π.χ.
αντί του void setCourseName (string name)
γράφουμε void GradeBook::setCourseName

2ον) Αποκρύπτονται οι μεταβλητές τις κλάσης. π.χ. στην διεπαφή ορίζουμε το
private:
string courseName;


και μετά ο προγραμματιστής που θα χρησιμοποιήσει την κλάση (και υποτίθεται δεν θα χρειαστεί να ξέρει το GradeBook.h αρχείο) πρέπει να γνωρίζει τις εσωτερικές μεταβλητές της κλάσης διότι τις χρησιμοποιεί στην υλοποίηση.
π.χ.
Κώδικας: Επιλογή όλων
void GradeBook::setCourseName (string name)
{
courseName = name;
}


Οπότε εγώ ρωτάω τώρα, αν ο διαχωρισμός διεπαφής - υλοποίησης της κλάσης γίνεται για να λειτουργεί κάπως διάφανα η κλάση χωρίς να είναι απαραίτητο να γνωρίζουμε το πώς λειτουργεί αλλά απλά να την χρησιμοποιήσουμε .... πώς στο καλό εγώ θα πρέπει να ξέρω την μεταβλητή courseName για να την χρησιμοποιήσω χωρίς να διαβάσω το .h αρχείο;

Οπότε σε τι ωφελεί αυτός ο διαχωρισμός από το να γράφω την κλάση σε ένα μόνο αρχείο;
Γνώσεις ⇛ Linux: Πολύ Καλό ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Μέτρια
Λειτουργικό: Ubuntu 10.04 LTS σε Fujitsu Siemens Amilo M6450
Προδιαγραφές ⇛ Intel(R) Pentium(R) M processor 1.70GHz │ 1,268 Gb │ Intel Corporation Mobile 915GM/GMS/910GML Express │ Intel Corporation PRO/Wireless 2200BG [Calexico2] │ - │ Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition │ Intel Corporation Mobile 915GM/GMS/910GML Express 1280X768
Άβαταρ μέλους
demosthenesk
punkTUX
punkTUX
 
Δημοσιεύσεις: 199
Εγγραφή: 09 Ιαν 2010, 17:39
Εκτύπωση

Προηγούμενη

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