odczyt liczb int - warning

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1521
Rejestracja: 09 sie 2009, 21:27

odczyt liczb int - warning

Nieprzeczytany post autor: personov »

Mam problem z ostrzeżeniami, które pojawiają mi się po kompilacji podczas odczytu liczb w formie int z GlobalVariables i z obiektów.
Poniżej kod z dwoma przykładami :

Kod: Zaznacz cały

#property strict
int liczba;
int wnd;
int nametime[10];
//////////////////////////////////////////////////
void init(){}
////////////////////////////////////////////////////////// 
void OnDeinit(const int reason){}
//////////////////////////////////////////////////////////
void start(){
   //odczyt wartości zmiennej globalnej o takiej nazwie np.EURUSD5 ta liczba to int
   wnd=GlobalVariableGet(Symbol()+IntegerToString(Period()));
   
   //odczyt liczby z obiektu EDIT o nazwie "ttt". Ale ta liczba to int 
   liczba=ObjectGetString(0,"ttt",OBJPROP_TEXT,0);
}
Pojawiają się ostrzeżenia jak w załączniku.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Solą życia jest kasa.

-rookie-
Maniak
Maniak
Posty: 2307
Rejestracja: 13 kwie 2015, 19:00

Re: odczyt liczb int - warning

Nieprzeczytany post autor: -rookie- »

Z dokumentacji wynika że funkcja ObjectGetString ma zwracać string, a GlobalVariableGet double. Albo bool. Więc konwersję na inny typ tj int trzeba zrobić dopiero potem, zamiast od razu deklarować te zmienne jako int. To znaczy wnd ma być typ double, a liczba ma mieć typ string. I dopiero potem konwersja np. StrToInteger(liczba) albo NormalizeDouble(wnd) itp. Prawdopoodbnie, bo nie sprawdzałem tego w praktyce, ale stawiam że są źle przypisane typy przy zmiennych bo funkcje co innego mają zwracajć, nie int.

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1521
Rejestracja: 09 sie 2009, 21:27

Re: odczyt liczb int - warning

Nieprzeczytany post autor: personov »

Próbowałem tak robić i nie pomaga.
Solą życia jest kasa.

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1521
Rejestracja: 09 sie 2009, 21:27

Re: odczyt liczb int - warning

Nieprzeczytany post autor: personov »

Tzn. odczyt liczby z obiektu pomogło, ale wnd ze zmiennych globalnych niby po zrobieniu NowmalizeDouble(wnd0);
nie wywala już błędu, ale nie mogę dalej tej liczby używać bo jest na teraz double nie int.
Solą życia jest kasa.

-rookie-
Maniak
Maniak
Posty: 2307
Rejestracja: 13 kwie 2015, 19:00

Re: odczyt liczb int - warning

Nieprzeczytany post autor: -rookie- »

personov pisze:
17 gru 2019, 15:00
Tzn. odczyt liczby z obiektu pomogło, ale wnd ze zmiennych globalnych niby po zrobieniu NowmalizeDouble(wnd0);
nie wywala już błędu, ale nie mogę dalej tej liczby używać bo jest na teraz double nie int.
Normalize double raczej nie pomoże bo to zbicie do float (https://docs.mql4.com/convert), dalej zmiennoprzecinkowa liczba. A konwersja tego typu int b = (int) liczba; . Ciekawe co z tym kompilator zrobi. A jak nie, to może najpierw DoubleToStr a potem StringToInteger. Nie znam się za bardzo na mql :?

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1521
Rejestracja: 09 sie 2009, 21:27

Re: odczyt liczb int - warning

Nieprzeczytany post autor: personov »

int b = (int) liczba
pomogło
Dzięki
Solą życia jest kasa.

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: odczyt liczb int - warning

Nieprzeczytany post autor: ninjaproject »

Zmienne zapisane jako GlobalVariable są zawsze typu double.
A więc, zmienna wnd powinna być typu double, a potem z nią trzeba zrobić cokolwiek jest w zamyśle programisty.

ObjectGetString() pobiera zmienną typu string, a nie int.
Jeżeli ta zmienna ma być potem zastosowana jako int, to trzeba ją skonwertować, czyli:

Kod: Zaznacz cały

liczba=StringToInteger(ObjectGetString(0,"ttt",OBJPROP_TEXT,0));
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

ODPOWIEDZ