Elaine |
» 2013-01-09 16:21:47 2) dodatkowe pole w klasie - ale to w praktyce sprawia, że trzeba zarządzać drugą zmienną, której zawartość jest identyczna do tej, która została zapisana w klasie |
Niekoniecznie, w C++03 string mógł być nieciągły. I wtedy też coś takiego byłoby sensowną implementacją c_str i data. |
|
czosnek17 Temat założony przez niniejszego użytkownika |
» 2013-01-09 19:55:33 To niestety też nie działa. Odkryłem jednak coś dziwnego. To działa: string tekst2 = "argh"; const char * napis2 = tekst2.c_str(); cout << "N1:" << napis2 << endl; cout << "N2:" << tekst2.c_str() << endl;
Ale jak zamienię argh na zmienną podwr: Nie działa. string zxc = "ahaha"; string tekst2 = zxc;
To też nie. Czyli mogę dać wartość zmiennej tylko przez dosłowne jej podanie? O_O |
|
DejaVu |
» 2013-01-09 20:18:34 Sprawdź czy ze słowem kluczowym static działa. Zresztą... ciągniesz ten temat jako 'nie do wiary' zamiast zajrzeć w kod źródłowy funkcji, którą wywołujesz by zobaczyć jak ona działa. |
|
czosnek17 Temat założony przez niniejszego użytkownika |
» 2013-01-09 22:16:23 Sprawdź czy ze słowem kluczowym static działa. |
Pokombinowałem i oczywiście nie. Zresztą... ciągniesz ten temat jako 'nie do wiary' zamiast zajrzeć w kod źródłowy funkcji, którą wywołujesz by zobaczyć jak ona działa. |
Ok, ale jak podejrzeć ten kod? W internecie nie znalazłem. |
|
DejaVu |
» 2013-01-09 22:39:10 Eh... pobierasz źródła biblioteki i szukasz funkcji w odpowiednim pliku. Gdybyś samodzielnie kompilował wszystkie biblioteki to byś nawet debuggerem mógł tam wejść.
/edit: No jeszcze jest opcja, że używasz jakiegoś starego kompilatora MinGW, który może mieć bugi i właśnie objawia Ci się jeden z nich. |
|
czosnek17 Temat założony przez niniejszego użytkownika |
» 2013-01-10 19:56:06 Ściągnąłem najnowszego Code Blocksa, chyba nie muszę mówić czy działa... Jeżeli chodzi o szukanie tej funkcji to nie chce mi się przekopywać biblioteki string. Zamiast robić pole tekstowe skorzystam z funkcji kopiującej tekst do schowka. Program będzie mniej efektowny, ale przynajmniej działający. Mimo wszystko dzięki za pomoc :) edit, otwieram Nie użyłem też tej funkcji z tego samego powodu, co poprzednio. Drążyłem dalej i mam wniosek: Jeżeli podam wartość zmiennej string "w ten sposób", wtedy wszystko działa. Gdy jednak składam stringa w pętli to nie działa. do { cout << txt[ licznik ] << endl << endl; podwr += txt[ licznik ]; licznik--; } while( licznik != - 1 );
Gdy za pętlę dam linijkę podwr = "cos"; to wtedy działa. Dlaczego? To dalej może być coś z c_str()? Przecież string ma wartość i nie powinno być ważne w jaki sposób ją otrzymał. |
|
DejaVu |
» 2013-01-10 21:28:52 Weź lepiej daj cały kod... irytuje mnie już ten temat i jego 'magiczność'. Nie ma opcji, aby std::string działał źle. |
|
czosnek17 Temat założony przez niniejszego użytkownika |
» 2013-01-10 21:43:22 irytuje mnie już ten temat i jego 'magiczność' |
Mnie też i to bardzo. Ale "są na świecie..." Program powinien skopiować wpisany tekst do schowka. To, o czym mówiłem w poprzednim poście jest w 41 i 42 linijce. #include <gtk/gtk.h> #include <iostream> #include <string> #include <cstring> #include <windows.h> using namespace std;
struct struktura { GtkWidget * sokno; GtkWidget * entinp; GtkWidget * entout; string stx; };
using namespace std;
void sprawdz_dlugosc( int & dlugosc, string txt ) { dlugosc = txt.size(); }
void odwroc( int & dlugosc, string txt, string & podwr, gpointer dane ) { struct struktura * gkp; gkp =( struct struktura * ) dane; int licznik = dlugosc; string znak; do { cout << txt[ licznik ] << endl << endl; podwr += txt[ licznik ]; licznik--; } while( licznik != - 1 ); cout << "podwr =" << podwr << endl; gkp->stx = podwr; }
void fodw1( string x, gpointer dane ) { struct struktura * gkp; gkp =( struct struktura * ) dane; int dlugosc; string tekst = x; string podwr; string tst; sprawdz_dlugosc( dlugosc, tekst ); odwroc( dlugosc, tekst, podwr, gkp ); }
void pobtxt( GtkWidget * widget, gpointer dane ) { struct struktura * gkp; gkp =( struct struktura * ) dane; const gchar * tekst; tekst = gtk_entry_get_text( GTK_ENTRY( gkp->entinp ) ); cout << tekst << endl; string txt; txt = tekst; cout << txt << endl; fodw1( txt, gkp ); }
void cpyclp( GtkWidget * w, gpointer dane ) { struct struktura * gkp; gkp =( struct struktura * ) dane; cout << "Z=" << gkp->stx << endl; string a = gkp->stx; string x = a; const char * output = x.c_str(); const size_t len = strlen( output ) + 1; HGLOBAL hMem = GlobalAlloc( GMEM_MOVEABLE, len ); memcpy( GlobalLock( hMem ), output, len ); GlobalUnlock( hMem ); OpenClipboard( 0 ); EmptyClipboard(); SetClipboardData( CF_TEXT, hMem ); CloseClipboard(); }
void rysujzmenu( gpointer dane ) { struct struktura * gkp; gkp =( struct struktura * ) dane; GtkWidget * mfix; mfix = gtk_fixed_new(); gtk_container_add( GTK_CONTAINER( gkp->sokno ), mfix ); GtkWidget * bodwr; bodwr = gtk_button_new_with_label( "Odwróć" ); gtk_fixed_put( GTK_FIXED( mfix ), bodwr, 10, 60 ); GtkWidget * skp; skp = gtk_button_new_with_label( "Skopiuj" ); gtk_fixed_put( GTK_FIXED( mfix ), skp, 60, 60 ); gkp->entinp = gtk_entry_new(); gtk_fixed_put( GTK_FIXED( mfix ), gkp->entinp, 10, 30 ); GtkWidget * labwpr; labwpr = gtk_label_new( "Podaj tekst do odwrócenia:" ); gtk_fixed_put( GTK_FIXED( mfix ), labwpr, 10, 10 ); g_signal_connect( G_OBJECT( bodwr ), "clicked", G_CALLBACK( pobtxt ), gkp ); g_signal_connect( G_OBJECT( skp ), "clicked", G_CALLBACK( cpyclp ), gkp ); gtk_widget_show_all( mfix ); }
int main( int argc, char * argv[] ) { struct struktura gkp; gtk_init( & argc, & argv ); gkp.sokno = gtk_window_new( GTK_WINDOW_TOPLEVEL ); gtk_window_set_position( GTK_WINDOW( gkp.sokno ), GTK_WIN_POS_CENTER ); gtk_window_set_default_size( GTK_WINDOW( gkp.sokno ), 160, 100 ); gtk_window_set_title( GTK_WINDOW( gkp.sokno ), "Odwracacz" ); gtk_container_set_border_width( GTK_CONTAINER( gkp.sokno ), 5 ); gtk_window_set_opacity( GTK_WINDOW( gkp.sokno ), 1 ); rysujzmenu( & gkp ); g_signal_connect( G_OBJECT( gkp.sokno ), "destroy", G_CALLBACK( gtk_main_quit ), NULL ); gtk_widget_show_all( gkp.sokno ); gtk_main(); return 0; }
|
|
1 2 3 « 4 » 5 |