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

[C++] Przekazywanie do funkcji wskaźnika do zmiennej klasy

Ostatnio zmodyfikowano 2013-01-24 21:48
Autor Wiadomość
berkov
Temat założony przez niniejszego użytkownika
[C++] Przekazywanie do funkcji wskaźnika do zmiennej klasy
» 2013-01-24 15:26:22
Hey ho!

Potrzebuje przekzac wskaznik na zmienna wewnatrz klasy (zawsze LPSTR) do funkcji ale bez potrzeby deklarowania konkretnej klasy wewnatrz funkcji.
Chodzi o to ze mam wiele klas i wiele dialogow i potrzebuje masowo wypelniac klasy stringami z tych dialogow i nie chce za kazdym pisac osobnej funkcji bo to zamias ulatwic mi prace, utrudni mi ja.

Chodzi mi o to by zamiast pisac konkretna funkcje dla kazdej klasy jak nizej:
C/C++
bool Control2LPSTR( HWND control, USERS * target ) {
   
    DWORD dlugosc = GetWindowTextLength( control );
    target->usr_name = new char[ dlugosc + 1 ];
    GetWindowText( control, target->usr_name, dlugosc + 1 );
    MessageBox( 0, target->usr_name, "", 0 );
   
    return true;

chcilbym miec cos takiego:
bool Control2LPSTR( HWND control, char * target )
gdzie target to juz od razu wskaznik na konkretny string (zawsze LPSTR), tu: user_info->usr_name

i tak oto ponizszy, ktory nie dziala:

classes.h: (czesciowo)
-----------
C/C++
class USERS
{
public:
    unsigned long usr_id;
    LPSTR usr_name;
    LPSTR usr_pass;
    LPSTR usr_auth_login;
    char usr_invoices[ 1 ];
   
    //USERS();
   
};

main.cpp: (czesciowo)
-----------
C/C++
USERS * user_info = new USERS; //deklaracja jeszcze przed WinMain

// a to juz w petli dialogu login'u BOOL CALLBACK WndProc_dLogin po przycisnieciu IDC_OK
Control2LPSTR( hLogin, user_info->usr_name );
MessageBox( 0, user_info->usr_name, 0, 0 ); //tu wyskakuje zawsze pusty

classes.cpp: (czesciowo)
-----------
C/C++
bool Control2LPSTR( HWND control, char * target ) {
   
    DWORD dlugosc = GetWindowTextLength( control );
    target = new char[ dlugosc + 1 ];
    GetWindowText( control, target, dlugosc + 1 );
    MessageBox( 0, target, "", 0 ); // tu jeszcze wszystklo ok, wyskakuje tresc wpisana do dialogu
   
    return true;
}

kompiluje sie ok, i wykonuje niby tez ok ale chociaz wewnatrz funkcji Control2LPSTR MessageBox wyswietla string to juz w main dostaje puste okienko.
CZemu?
myslalem ze przekazalem do funkcji wskaznik do zmiennej wewnatrz klasy i ta zmienna sie wypelnila ale najwyrazniej tak sie nie stalo.

dzieki z gory!
berkov.
P-74915
krzyk
» 2013-01-24 15:35:53
bool Control2LPSTR( HWND control, char &* target )
chyba tak powinno być ale sam niewiem dlaczego więc niech ktoś bom ciekaw;)

//EDIT
bool Control2LPSTR( HWND control, char *& target )
P-74916
berkov
Temat założony przez niniejszego użytkownika
» 2013-01-24 15:52:45
@krzyk,
WOW! Mistrzu dziala! ale nie rozumiem tego zapisu... "wskaznik na wartosc wskaznika"??? to troche nie logiczne i zguplem!!
P-74920
krzyk
» 2013-01-24 16:00:33
Mistrzu
Eeee...Gdybym był mistrzem to wiedziałbym dlaczego tak ma być a niewiem,więc niech jakiś wykształciuch wytłumaczy xD
P-74922
kubawal
» 2013-01-24 16:09:16
char *&
Oznacza to:
Referencja do wskaźnika do tablicy znaków zakończonej zerem (C-stringa)
W skrócie jest to ref. do łańcucha w stylu języka C.

Typ
char &*
 oznacza wskaźnik na referencję znaku.
C/C++
char * cstr = "Blebleble"; // łańcuch
char *& cstrref = str; // referencja do łańcucha
//...
char ch = 'z'; // znak
char &* chptrref = & ch; // referencja do adresu znaku
P-74923
Mrovqa
» 2013-01-24 21:48:30
char *&
Oznacza to:
Referencja do wskaźnika do tablicy znaków zakończonej zerem (C-stringa)
W skrócie jest to ref. do łańcucha w stylu języka C.

Typ
char &*
 oznacza wskaźnik na referencję znaku.
C/C++
char * cstr = "Blebleble"; // łańcuch
char *& cstrref = str; // referencja do łańcucha
//...
char ch = 'z'; // znak
char &* chptrref = & ch; // referencja do adresu znaku
Wiesz, co piszesz?
Nie można deklarować wskaźnika do referencji. Z resztą - to nie ma w ogóle sensu.
C/C++
char * cstr = "Blebleble"; // łańcuch
char *& cstrref = cstr; // referencja do łańcucha = adresu pierwszego znaku
//...
char ch = 'z'; // znak
char *& /*kolejnosc!*/ chptrref = & ch; // referencja do adresu znak
P-74943
« 1 »
  Strona 1 z 1