Referencja i TEdit

dział ogólny

Referencja i TEdit

Nowy postprzez duf » czwartek, 11 lutego 2010, 10:29

Jak przekazać przez referencję wartość "Edit->Text" ?
Kod: Zaznacz cały
void __fastcall Funkcja(String&);
Funkcja( Edit1->Text );

Dostaję takie komunikaty:
Reference initialized with 'UnicodeString', needs lvalue of type 'UnicodeString'
Type mismatch in parameter 'nazwa' (wanted 'UnicodeString &', got 'UnicodeString')
Nie rozumiem ich bo z typem wstring nie ma tych problemów.
Avatar użytkownika
duf
Intelektryk
Intelektryk
 
Posty: 175
Dołączył(a): czwartek, 9 października 2008, 13:02
Podziękował : 17
Otrzymał podziękowań: 2
System operacyjny: Windows 10
Kompilator: XE8
Gadu Gadu: 0
    Windows XPFirefox

Re: Referencja i TEdit

Nowy postprzez polymorphism » czwartek, 11 lutego 2010, 10:58

Być może chodzi o to, że próbujesz przekazać referencję do obiektu tymczasowego - jak sądzę, właściwość Text zwraca Stringa przez wartość. Zmiana na const referencję powinna rozwiązać problem.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Referencja i TEdit

Nowy postprzez duf » czwartek, 11 lutego 2010, 11:11

I rozwiązała. Dziękuję.
Avatar użytkownika
duf
Intelektryk
Intelektryk
 
Posty: 175
Dołączył(a): czwartek, 9 października 2008, 13:02
Podziękował : 17
Otrzymał podziękowań: 2
System operacyjny: Windows 10
Kompilator: XE8
Gadu Gadu: 0
    Windows XPFirefox

Re: Referencja i TEdit

Nowy postprzez Cyfrowy Baron » czwartek, 11 lutego 2010, 11:22

Nie wiem czy to ma dla ciebie znaczenie, ale zawartość właściwości Text obiektu typu TEdit można przekazać bez referencji:

Kod: Zaznacz cały
void __fastcall Funkcja(String Text)
{
Form1->Edit2->Text = Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
Funkcja(Edit1->Text);
}


Oczywiście nie wiem co ta funkcja ma robić, więc możliwe, że potrzebujesz referencji.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Referencja i TEdit

Nowy postprzez polymorphism » czwartek, 11 lutego 2010, 11:29

W prawdzie String ma wbudowany mechanizm copy-on-write, ale w C++ dobrą zasadą jest przekazywanie większych rzeczy przez referencję - chodzi o wyrobienie nawyku. To samo z const...
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Referencja i TEdit

Nowy postprzez duf » czwartek, 11 lutego 2010, 11:33

Przez referencje funkcja nie tworzy nowych obiektów a jedynie pracuje na oryginale. Mniej zajmowanej pamięci szybsze wykonywanie kodu i porządek.
Tak mi się wydaje na podstawie wiedzy jaką kiedyś zdobywałem. Być może się mylę.
Avatar użytkownika
duf
Intelektryk
Intelektryk
 
Posty: 175
Dołączył(a): czwartek, 9 października 2008, 13:02
Podziękował : 17
Otrzymał podziękowań: 2
System operacyjny: Windows 10
Kompilator: XE8
Gadu Gadu: 0
    Windows XPFirefox

Re: Referencja i TEdit

Nowy postprzez Cyfrowy Baron » czwartek, 11 lutego 2010, 11:41

W sumie to prawda, referencja otrzymuje jako argument lub zwraca jako wartość konkretny adres, więc argument reprezentuje konkretny obiekt, co rzeczywiście przy dużych obiektach się opłaca. Nie tylko zresztą przy dużych, ale zastanawia mnie zasadność stosowania referencji do prostych funkcji, gdzie nie jest wymagane operowanie na obiekcie, a tylko przekazanie mu konkretnej wartości jak to jest w przypadku wartości typu AnsiString, czy też UnicodeString?!
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Referencja i TEdit

Nowy postprzez duf » czwartek, 11 lutego 2010, 11:57

Cyfrowy Baron napisał(a):... gdzie nie jest wymagane operowanie na obiekcie, a tylko przekazanie mu konkretnej wartości jak to jest w przypadku wartości typu AnsiString, czy też UnicodeString?!


W moim przypadku jest to przekonywujący argument.
Avatar użytkownika
duf
Intelektryk
Intelektryk
 
Posty: 175
Dołączył(a): czwartek, 9 października 2008, 13:02
Podziękował : 17
Otrzymał podziękowań: 2
System operacyjny: Windows 10
Kompilator: XE8
Gadu Gadu: 0
    Windows XPFirefox

Re: Referencja i TEdit

Nowy postprzez polymorphism » czwartek, 11 lutego 2010, 11:58

(...) ale zastanawia mnie zasadność stosowania referencji do prostych funkcji, gdzie nie jest wymagane operowanie na obiekcie, a tylko przekazanie mu konkretnej wartości jak to jest w przypadku wartości typu AnsiString, czy też UnicodeString?!

W sumie sam sobie odpowiedziałeś na pytanie w pierwszej części wypowiedzi ;) Wielkość i stopień skomplikowania funkcji nie ma tutaj znaczenia.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 5 gości