CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Problem z kontrolką Label.

Problem z kontrolką Label.

dział ogólny

Re: Problem z kontrolką Label.

Nowy postprzez lukagrom » piątek, 6 lipca 2018, 08:32

Też potwierdzam, że tradycyjnia skadnia C/C++, dla standardowych typów (int, char, double, etc...) jak najbardziej działa dla przypisania 3 zmiennych:
KOD cpp:     UKRYJ  
int licznik=1,a,b;
 b=a=licznik;
 

Natomiast przypisanie potrójne dla właściwości Caption zwracającej - UnicodeString, wywala błędy:
KOD cpp:     UKRYJ  
UnicodeString text="Poland";
Label1->Caption=Form1->Caption=text;
 


[bcc32 Error] _m_rown1.cpp(22): E2492 Properties may only be assigned using a simple statement, e.g. "prop = value;"

Coś czuje, że to duch Delphi/Object Pascala w sprawach komponentowych się odzywa.
Avatar użytkownika
lukagrom
Bladawiec
Bladawiec
 
Posty: 37
Dołączył(a): wtorek, 1 stycznia 2013, 14:54
Podziękował : 6
Otrzymał podziękowań: 0
System operacyjny: Windows Vista
Kompilator: C++ Builder 10.1 Starter
Gadu Gadu: 0
    Windows VistaChrome

Re: Problem z kontrolką Label.

Nowy postprzez lukagrom » piątek, 6 lipca 2018, 09:00

Chyba jednak tak ma być, bo Visual C++ zachowuje się identycznie. 2 właściwości komponentów idzie przypisać, 3 par już nie.
KOD cpp:     UKRYJ  
 System::String^ text="C++";
 
label1->Text=button1->Text=text ;//error
 


'void System::Windows::Forms::Control::Text::set(System::String ^)' : cannot convert parameter 1 from 'void' to 'System::String ^'
1> No user-defined-conversion operator available, or
1> Expressions of type void cannot be converted to other types
Avatar użytkownika
lukagrom
Bladawiec
Bladawiec
 
Posty: 37
Dołączył(a): wtorek, 1 stycznia 2013, 14:54
Podziękował : 6
Otrzymał podziękowań: 0
System operacyjny: Windows Vista
Kompilator: C++ Builder 10.1 Starter
Gadu Gadu: 0
    Windows VistaChrome

Re: Problem z kontrolką Label.

Nowy postprzez polymorphism » piątek, 6 lipca 2018, 10:54

W przykładzie z Visuala to duch C# się odzywa, bo w obu przypadkach semantyka przypisania znana z C/C++ nie jest zachowana. Ciekawe, czy to ma jakieś sensowne uzasadnienie, czy po prostu "tak wyszło".
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 7Firefox

Re: Problem z kontrolką Label.

Nowy postprzez lukagrom » piątek, 6 lipca 2018, 12:51

Jeszcze dla upewnienia się na "czystych intach" sprawdziłem potrójne przypisania, bo teoretycznie cyfra to cyfra, a tekst to może mieć jakieś bufory, czy inne takie.
KOD cpp:     UKRYJ  
int dlugosc,szerokosc,wzorzec=Panel1->Width*3;
 dlugosc=szerokosc=wzorzec;
 Form1->Width=dlugosc;
 Form1->Height=szerokosc;
 

i to jest rzeczywiście dziwaczne, że zrobione to samo, na właściwościach int komponentów, z pominięciem zmiennych int wywala już błędy, te same co wcześniej:
KOD cpp:     UKRYJ  
Form1->Width=Form1->Height=Panel1->Width*3;
 

Visual C++ na "czystych intach" zachowuje się ponownie analogicznie.
Można by było jeszcze sprawdzić, czy taki zapis "potrójny-intowski" zostanie zaakceptowany, przy dynamicznym tworzeniu komponentu:
KOD cpp:     UKRYJ  
 TButton *nowy_Bt = new TButton(this);
 nowy_Bt->Parent=this;
 nowy_Bt->Width=nowy_Bt->Height=100;
 

I tutaj także, ten sam błąd. Reasumując, jest parcie na deklarowanie i używanie zmiennych, jeśli chce się manipulować wartościami właściwości komponentów.
Avatar użytkownika
lukagrom
Bladawiec
Bladawiec
 
Posty: 37
Dołączył(a): wtorek, 1 stycznia 2013, 14:54
Podziękował : 6
Otrzymał podziękowań: 0
System operacyjny: Windows Vista
Kompilator: C++ Builder 10.1 Starter
Gadu Gadu: 0
    Windows VistaChrome

Re: Problem z kontrolką Label.

Nowy postprzez polymorphism » piątek, 6 lipca 2018, 13:42

Można by było jeszcze sprawdzić (...)

To bez znaczenia. Przypisanie do właściwości to jest nic innego jak wywołanie metody np. setHeight czy setWidth. Zapewne te mutatory zwracają typ void i dlatego nie można zrobić wielokrotnego przypisania. To samo byłoby, gdyby napisać operator przypisania w ten sposób:
KOD cpp:     UKRYJ  
class foo
{
public:
    void operator=(const foo&) {}
};

...

foo a, b, c;
   
b = c; // ok
a = b; // ok

a = b = c; // błąd
 

Dlatego dla zachowania semantyki przypisania operator przypisania zwykle zwraca obiekt this.
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 7Firefox

Re: Problem z kontrolką Label.

Nowy postprzez lukagrom » piątek, 6 lipca 2018, 16:14

Na pocieszenie, można dowolną ilość zmiennych przypisywać do wartości właściwości jednego komponentu.
KOD cpp:     UKRYJ  
 int a,b,c,d,e,f,g,h,i;
 a=b=c=d=e=f=g=h=i=StrToInt(Panel1->Width);
 UnicodeString a1,b1,c1,d1,e1,f1,g1,h1,i1;
 a1=b1=c1=d1=e1=f1=g1=h1=i1=Form1->Caption;
 
Avatar użytkownika
lukagrom
Bladawiec
Bladawiec
 
Posty: 37
Dołączył(a): wtorek, 1 stycznia 2013, 14:54
Podziękował : 6
Otrzymał podziękowań: 0
System operacyjny: Windows Vista
Kompilator: C++ Builder 10.1 Starter
Gadu Gadu: 0
    Windows VistaChrome

Poprzednia strona

  • 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ł: Brak zalogowanych użytkowników i 0 gości

cron