Απορίες για c/c++

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
Post Reply
User avatar
cypher
Venus Former Team Member
Posts: 6207
Joined: Mon Sep 29, 2008 9:12 pm
Academic status: Alumnus/a
Gender:

Re: Απορίες για c/c++

Post by cypher » Wed Feb 24, 2010 1:11 am

Φτιαχνω κατι αντιστοιχο με το thread της java για απορειες σε c/c++. :-p
Και μια ερωτηση για οποιον/α ισως ξερει. Φτιαχνω εναν copy constructor και θελω να αντιγραψω αυτα (περισσοτερα ειναι απλα βαζω αυτα για παραδειγμα):
GtkWidget *example;
GtkTextBuffer *buffer;
GtkTextTag *Tag;
GtkTextSearchFlags NULLF;
Δεν θελω ομως να τα αντιγραψω κατ'αναφορα γιατι το αντικειμενο κλασης που τα εχει θα μπει σε vector και υποθετω οτι θα σβηνει τα αρχικα στοιχεια μετα την αντιγραφη. Υπαρχει κατι πιο ετοιμο (σαν αλλος copy constructor) για τα GtkWidgets κτλ;
Υποψιν δεν εχω εντρυφισει πολυ ακομα οποτε μπορει να ρωταω κατι προφανες. :-p
Εδιτ: βασικα το δοκιμασα και δουλευει και με μεταφορα κατ'αναφορα αλλα μου φαινεται καπως improper. Αν εχετε καμια καλυτερη ιδεα πειτε ελευθερα. :)

---------------------
Εξτρα bonus ερωτηση:
Πως μπορω να ορισω στην κονσολα να μην εμφανιζεται καθε φορα που ξεκιναει το προγραμμα; :-p
ImageImageImageImageImageImageImage
User avatar
AmmarkoV
Wow! Terabyte level
Wow! Terabyte level
Posts: 2838
Joined: Thu Nov 04, 2004 2:55 pm
Gender:
Location: Reloaded @ Santa Friday
Contact:

Re: Απορίες για c/c++

Post by AmmarkoV » Wed Feb 24, 2010 5:58 pm

Κοίτα αυτά είναι pointers..
Οπότε αν θές σε C να κάνεις "βαθύ" αντίγραφο ( το GTK είναι σε C ) θα πρέπει πρώτα να ξέρεις το μέγεθος του κάθε ενός και στην συνέχεια να το copiάρεις bit by bit..

για παράδειγμα
memcpy ( target_example , example , sizeof(GtkWidget) );
memcpy ( target_buffer, buffer , sizeof( GtkTextBuffer ) ) ;
memcpy ( target_tag, Tag , sizeof( GtkTextTag ) );

κτλ..

έτσι αποκλείεται να είναι invalid οι pointers στο vector που λές αλλά πρέπει να μου εξηγίσεις πιο καλά τι θές γιατί κατα πάσα πιθανότητα δεν καταλαβαίνω τι ρωτάς!
Spoiler: εμφάνιση/απόκρυψη
I would love to change the world, but they won't give me the source code. Οι καθηγητές πληρώνονται από το δημόσιο αρα από όλους τους Έλληνες για να κάνουν τα μαθήματα. Όλοι οι Έλληνες θα έπρεπε να μπορούν να δουν τα μαθήματα τα οποία πληρώνουν! Tο πνευματικό έργο που επιτελείται με τα χρήματα του δημοσίου ΔΕΝ είναι μόνο δικό σας Όποιος δεν δίνει πανελλήνιες έχει δικαίωμα στην γνώση που πληρώνει [url=http://ammar.gr/gddg]gddg blog[/url]
Image
User avatar
cypher
Venus Former Team Member
Posts: 6207
Joined: Mon Sep 29, 2008 9:12 pm
Academic status: Alumnus/a
Gender:

Re: Απορίες για c/c++

Post by cypher » Wed Feb 24, 2010 8:03 pm

AmmarkoV wrote:Κοίτα αυτά είναι pointers..
Οπότε αν θές σε C να κάνεις "βαθύ" αντίγραφο ( το GTK είναι σε C ) θα πρέπει πρώτα να ξέρεις το μέγεθος του κάθε ενός και στην συνέχεια να το copiάρεις bit by bit..

για παράδειγμα
memcpy ( target_example , example , sizeof(GtkWidget) );
memcpy ( target_buffer, buffer , sizeof( GtkTextBuffer ) ) ;
memcpy ( target_tag, Tag , sizeof( GtkTextTag ) );

κτλ..

έτσι αποκλείεται να είναι invalid οι pointers στο vector που λές αλλά πρέπει να μου εξηγίσεις πιο καλά τι θές γιατί κατα πάσα πιθανότητα δεν καταλαβαίνω τι ρωτάς!
Oκ καταλαβα πανω κατω. :-)
Για το δευτερο καμια ιδεα;
Εξτρα bonus ερωτηση:
Πως μπορω να ορισω στην κονσολα να μην εμφανιζεται καθε φορα που ξεκιναει το προγραμμα; :-p
ImageImageImageImageImageImageImage
User avatar
AmmarkoV
Wow! Terabyte level
Wow! Terabyte level
Posts: 2838
Joined: Thu Nov 04, 2004 2:55 pm
Gender:
Location: Reloaded @ Santa Friday
Contact:

Re: Απορίες για c/c++

Post by AmmarkoV » Wed Feb 24, 2010 10:41 pm

Υποθέτω αυτό θα πρέπει να κάνει init ένα σκέτο Window..
Γενικά προσωπικά χρησιμοποιώ WxWidgets αλλά λόγω του ότι από κάτω bindings για GTK έχει σε linux είναι αρκετά λογικό :)

Επίσης θα σου πρότεινα να παραγγείλεις από το internet κανένα βιβλίο για ανάπτυξη εφαρμογών με GTK ( πχ http://www.amazon.com/Foundations-Devel ... 1590597931 ) , για wxWidgets αυτό που πήρα ( http://www.amazon.com/Cross-Platform-Pr ... d_sim_b_15 ) πραγματικά λύνει πολλές απορίες και καταλαβαίνεις όλο τον σχεδιασμό από την αρχή οπότε κάνουν πολλά πράγματα sense μετά! :)

Code: Select all

##include <gtk/gtk.h>
int
main (int argc, char **argv)
{
  GtkWidget     *win, *but;
  gtk_init( &argc, &argv );
  win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  g_signal_connect (win, "delete-event",
                    G_CALLBACK (gtk_true), NULL);
  g_signal_connect (win, "destroy",
                    G_CALLBACK (gtk_main_quit), NULL);
  but = gtk_button_new_with_label ("Close yourself. I mean it!");
  g_signal_connect_swapped (but, "clicked",
                  G_CALLBACK (gtk_object_destroy), win);
  gtk_container_add (GTK_CONTAINER (win), but);
  gtk_widget_show_all (win);
  gtk_main ();
  return 0;
}
Spoiler: εμφάνιση/απόκρυψη
I would love to change the world, but they won't give me the source code. Οι καθηγητές πληρώνονται από το δημόσιο αρα από όλους τους Έλληνες για να κάνουν τα μαθήματα. Όλοι οι Έλληνες θα έπρεπε να μπορούν να δουν τα μαθήματα τα οποία πληρώνουν! Tο πνευματικό έργο που επιτελείται με τα χρήματα του δημοσίου ΔΕΝ είναι μόνο δικό σας Όποιος δεν δίνει πανελλήνιες έχει δικαίωμα στην γνώση που πληρώνει [url=http://ammar.gr/gddg]gddg blog[/url]
Image
User avatar
cypher
Venus Former Team Member
Posts: 6207
Joined: Mon Sep 29, 2008 9:12 pm
Academic status: Alumnus/a
Gender:

Re: Απορίες για c/c++

Post by cypher » Wed Feb 24, 2010 11:29 pm

AmmarkoV wrote:Υποθέτω αυτό θα πρέπει να κάνει init ένα σκέτο Window..
Γενικά προσωπικά χρησιμοποιώ WxWidgets αλλά λόγω του ότι από κάτω bindings για GTK έχει σε linux είναι αρκετά λογικό :)
Σκετο window εμφανιζα και πριν αλλα παλι συνεχιζει να πεταγεται απο πισω η κονσολα για αυτο και ρωτησα. Βρηκα κατι googlaρωντας που ουσιαστικα μου λεει οτι αποφευγω την κονσολα αν βαλω μια win32main (or something like that) αλλα ηλπιζα σε μια πιο portable λυση. :-p
υ.γ. yeap βιβλιο θα αγορασω μολις εχω λεφτα. :-)
ImageImageImageImageImageImageImage
User avatar
AmmarkoV
Wow! Terabyte level
Wow! Terabyte level
Posts: 2838
Joined: Thu Nov 04, 2004 2:55 pm
Gender:
Location: Reloaded @ Santa Friday
Contact:

Re: Απορίες για c/c++

Post by AmmarkoV » Thu Feb 25, 2010 12:08 am

το ξεκινάς μέσω κονσόλας ?
ή standalone ( μέσω του desktop environment )
Spoiler: εμφάνιση/απόκρυψη
I would love to change the world, but they won't give me the source code. Οι καθηγητές πληρώνονται από το δημόσιο αρα από όλους τους Έλληνες για να κάνουν τα μαθήματα. Όλοι οι Έλληνες θα έπρεπε να μπορούν να δουν τα μαθήματα τα οποία πληρώνουν! Tο πνευματικό έργο που επιτελείται με τα χρήματα του δημοσίου ΔΕΝ είναι μόνο δικό σας Όποιος δεν δίνει πανελλήνιες έχει δικαίωμα στην γνώση που πληρώνει [url=http://ammar.gr/gddg]gddg blog[/url]
Image
User avatar
cypher
Venus Former Team Member
Posts: 6207
Joined: Mon Sep 29, 2008 9:12 pm
Academic status: Alumnus/a
Gender:

Re: Απορίες για c/c++

Post by cypher » Thu Feb 25, 2010 12:17 am

AmmarkoV wrote:το ξεκινάς μέσω κονσόλας ?
ή standalone ( μέσω του desktop environment )
Kαι στις δυο περιπτωσεις (και μεσω ide) βγαινει η κονσολα απο πισω. :-p
Βαζω μια τον κωδικα

Code: Select all

#include <gtk/gtk.h>
#include <glib/gerror.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <stdio.h>

using namespace std;
....

     int main (int argc, char *argv[]) {
    GtkWidget *window;
    GtkWidget *nb;
    GtkWidget *vbox;

    gtk_init(&argc, &argv);  //initialization of the gtk library

    /* Create the main window */
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);  
    gtk_container_set_border_width (GTK_CONTAINER (window), 8); 
    gtk_window_set_title (GTK_WINDOW (window), "Title");  
    gtk_window_set_position (GTK_WINDOW (window),GTK_WIN_POS_CENTER);
    //Window width and height are loaded from the options
    gtk_window_set_default_size(GTK_WINDOW(window),..μπλα μπλα σωστα arguments...);
    gtk_widget_realize(window);
    //connects the X button to the exit function
    g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);

    /* The notebook */
    nb = gtk_notebook_new();
    gtk_notebook_set_scrollable(GTK_NOTEBOOK(nb), TRUE);
    tab::init(nb);

    /* Pack things in a vbox */
    vbox = gtk_vbox_new (TRUE, 6);
    gtk_container_add (GTK_CONTAINER (window), vbox);
    gtk_box_pack_start (GTK_BOX (vbox), nb, TRUE, TRUE, 0);


    .....ασχετα κομματια οπου απλα βαζω tabs στο notebook...


    gtk_widget_show_all(window); 
    gtk_main();  

    return 0;
}
Δυσκολευομαι να καταλαβω τι μπορει να λειπει. :smt017 Δεν εχω κατι που να τυπωνει στο cout η να ζηταει input απο cin ετσι ωστε να ξεκιναει μονη η κονσολα.
ImageImageImageImageImageImageImage
User avatar
AmmarkoV
Wow! Terabyte level
Wow! Terabyte level
Posts: 2838
Joined: Thu Nov 04, 2004 2:55 pm
Gender:
Location: Reloaded @ Santa Friday
Contact:

Re: Απορίες για c/c++

Post by AmmarkoV » Thu Feb 25, 2010 12:21 am

Αν ανοίξεις το exe από τον Desktop Manager κατα πάσα πιθανότητα μπορεί να μην ανοίγει και η κονσόλα , μπορεί να είναι το stderr ξέρω γω ή κάτι άλλο IDE specific..
Spoiler: εμφάνιση/απόκρυψη
I would love to change the world, but they won't give me the source code. Οι καθηγητές πληρώνονται από το δημόσιο αρα από όλους τους Έλληνες για να κάνουν τα μαθήματα. Όλοι οι Έλληνες θα έπρεπε να μπορούν να δουν τα μαθήματα τα οποία πληρώνουν! Tο πνευματικό έργο που επιτελείται με τα χρήματα του δημοσίου ΔΕΝ είναι μόνο δικό σας Όποιος δεν δίνει πανελλήνιες έχει δικαίωμα στην γνώση που πληρώνει [url=http://ammar.gr/gddg]gddg blog[/url]
Image
User avatar
cypher
Venus Former Team Member
Posts: 6207
Joined: Mon Sep 29, 2008 9:12 pm
Academic status: Alumnus/a
Gender:

Re: Απορίες για c/c++

Post by cypher » Thu Feb 25, 2010 12:47 am

AmmarkoV wrote:Αν ανοίξεις το exe από τον Desktop Manager κατα πάσα πιθανότητα μπορεί να μην ανοίγει και η κονσόλα , μπορεί να είναι το stderr ξέρω γω ή κάτι άλλο IDE specific..
Νοpe ανοιγει οπως και να τρεξω το .exe . Θα δοκιμασω και σε linux αργοτερα να δω τι κανει εκει. :-p Ισως το καθοριζει το namespace του std or something like that, dunno. :smt017

Προσωρινα προσθεσα αυτα:

Code: Select all

#include <windows.h>
.....
FreeConsole();

Αν βρεθει καμια πιο universal λυση το αλλαζω.
ImageImageImageImageImageImageImage
Post Reply

Return to “Προγραμματισμός”