Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rzutowanie na strukturę

Ostatnio zmodyfikowano 2014-02-05 19:19
Autor Wiadomość
matiko101
Temat założony przez niniejszego użytkownika
Rzutowanie na strukturę
» 2014-02-04 16:21:14
Może źle napisałem temat, ale nie wiem jak to się dokładnie nazywa ;)

Posiadam zmienną gpointer i chce ją rzutować na strukturę tzn.

C/C++
struct Okna
{
    GtkWidget * okno;
    GtkWidget * tlo;
    GtkWidget * kontener;
};

Okna window;

C/C++
g_signal_connect( G_OBJECT( buttony.button[ 7 ] ), "clicked", G_CALLBACK( & Przyciski::wypelnianie_nazw ), gpointer( & window ) );

C/C++
int Przyciski::wypelnianie_nazw( GtkWidget * button, gpointer dane )
{
    fstream plik_nazwy;
    plik_nazwy.open( "programy.txt", std::ios::in );
    for( int i = 0, j = 0; i != 6; i++ )
    {
        view[ i ] = gtk_text_view_new();
        getline( plik_nazwy, nazwa_globalna[ i ] );
        bufor[ i ] = gtk_text_view_get_buffer( GTK_TEXT_VIEW( view[ i ] ) );
        gtk_text_buffer_get_iter_at_offset( bufor[ i ], & iter[ i ], 0 );
        gtk_text_buffer_insert( bufor[ i ], & iter[ i ], nazwa_globalna[ i ].c_str(), - 1 );
    }
}

Chciałbym, żeby cała struktura Okna była w metodzie wypelnianie_nazw. Będę potrzebował stamtąd okno i kontener. Proszę o pomoc, ale nie o odsyłanie do kursu ... (ogólnie to nic nie mogę znaleźć o g_signal_connect co by mi pomogło, bo  cały czas mam problem z tą funkcją
P-103964
alixir
» 2014-02-04 17:16:27
A w czym dokładniej problem ?

Zakładam, że gpointer jest typu void. Na takim wskaźniku nie można dokonać dereferencji wprost. W takim przypadku musiałbyś go rzutować statycznie na wskaźnik typu Okna
P-103969
matiko101
Temat założony przez niniejszego użytkownika
» 2014-02-04 17:20:39
Tylko właśnie mam problem z tym jak to zrobić ;/
P-103970
alixir
» 2014-02-04 17:30:12
C/C++
Okna * wsk;
wsk = static_cast < Okna *>( dane );
P-103971
matiko101
Temat założony przez niniejszego użytkownika
» 2014-02-05 16:28:34
Nie za bardzo rozumiem co znaczy
Okna * wsk
 i jak tego użyć

EDIT: moja struktura jest w main,a dane w innej funkcji i nie wiem gdzie wstawić te dwie linie
P-104049
alixir
» 2014-02-05 17:31:42
To może inne pytanie, bo może wcale nie potrzebujesz używać gpointer. Jest jakiś konkretny do tego powód? Nie możesz po prostu zdefiniować strukturę jako typ? (typedef) Wtedy możesz ją przekazywać bez żadnego rzutowania
P-104055
MrPoxipol
» 2014-02-05 18:06:33
C/C++
struct Point
{
    int x;
    int y;
};

void callback( GtkWidget * widget, gpointer user_data )
{
    Point * point = static_cast < Point *>( user_data );
    cout << point->x << ", " << point->y << endl;
}

Point point;
point.x = 1; point.y = 5;

g_signal_connect( G_OBJECT( foo_button ), "clicked", G_CALLBACK( callback ), GPOINTER( & point ) );

Musisz wiedzieć, że gpointer to zwykłe void*.
P-104057
matiko101
Temat założony przez niniejszego użytkownika
» 2014-02-05 18:23:43
Jesteście wielcy :P

MrPoxipol

Na razie zrobiłem to ze struktura globalna tzn.
C/C++
struct Okna
{
    GtkWidget * okno;
    GtkWidget * tlo;
    GtkWidget * kontener;
    int x;
};

C/C++
int Przyciski::wypelnianie_nazw( GtkWidget * button, gpointer dane )
{
   
    Okna * window = static_cast < Okna *>( dane );
    fstream plik_nazwy;
    plik_nazwy.open( "programy.txt", std::ios::in );
    for( int i = 0, j = 0; i != 6; i++ )
    {
        view[ i ] = gtk_text_view_new();
        getline( plik_nazwy, nazwa_globalna[ i ] );
        bufor[ i ] = gtk_text_view_get_buffer( GTK_TEXT_VIEW( view[ i ] ) );
        gtk_text_buffer_get_iter_at_offset( bufor[ i ], & iter[ i ], 0 );
        gtk_text_buffer_insert( bufor[ i ], & iter[ i ], nazwa_globalna[ i ].c_str(), - 1 );
        cout << window->x;
    }
}

C/C++
window.x = 998;
g_signal_connect( G_OBJECT( buttony.button[ 7 ] ), "clicked", G_CALLBACK( & Przyciski::wypelnianie_nazw ), gpointer( & window ) );

Tylko mam ostatnie pytanie :P
W metodzie wypelnianie_nazw muszę mieć zadeklarowaną strukturę Okna(jest globalna),a chciałbym żeby struktura Okna nie była globalna tylko zadeklarowana w mainie.
Dlatego mój problem rozwiązał się po części :( 

Alixir

Zainteresuję się po skończeniu tej Aplikacji typedef, bo nigdy tego nie widziałem na oczy :D
P-104058
« 1 » 2
  Strona 1 z 2 Następna strona