Na rozdil mezi DUERR_TYPEMISMATCH a DUERR_CANNOTCONVERT jsem psal na ulitu, a odpoved je: DUERR_TYPEMISMATCH se pouziva pouze jen a tehdy, pokud typ parametru predavaneho referenci neodpovida deklaraci funkce. Neshody u binarnich/unarnich operaci jsou DUERR_CANNOTCONVERT.johnny píše:Tj. parametr předávaný odkazem, tj. řešit až v du6.Kód: Vybrat vše
DUERR_TYPEMISMATCH, /**< type mismatch in a parameter passed by reference */
DU5
- andree
- Matfyz(ák|ačka) level III
- Příspěvky: 106
- Registrován: 9. 12. 2006 17:00
- Typ studia: Informatika Mgr.
- Kontaktovat uživatele:
to by som povedal, ze nic specialne sa tu robit nebude.. sice dat real ako index pola je dobra prasacina, ale skonvertovat na int s warningom sa to da, takze...Kate píše: jeste by se mohlo nejak vysondovat, jak je to z tou konverzi real->integer u indexu pole (zda to je mozne nebo ne)
still a good questionKate píše: a pak taky jestli zalezi na tom, jake hlasky budeme vypisovat, kdyz bude indexu u pole vic/min nez je rozmeru.
-
- Matfyz(ák|ačka) level I
- Příspěvky: 29
- Registrován: 2. 2. 2006 13:07
- Typ studia: Informatika Bc.
- Bydliště: Pilsen
- Kontaktovat uživatele:
Jak se prida tedy velikost toho typu do tabulky?Dikyrastik píše:compute_size vrati konstantu a aby si ju mohol dostat na zasobnik cez LDLITI, tak ju do tabulky musis najprv pridat.Anonymous píše:Ako to, ze sedia?vrati stack unity ale LDLITI potrebuje ls_int_index.Kód: Vybrat vše
access_array()->element_type()->compute_size()
(alebo ako presne sa tie typy volaju)
- luk
- Matfyz(ák|ačka) level II
- Příspěvky: 74
- Registrován: 6. 6. 2005 18:32
- Typ studia: Informatika Mgr.
- Bydliště: Praha
Jak reagovat na přístup mimo pole?
Můžu se zeptat, co udělat, když někdo přistoupí mimo meze pole?
Pochopil jsem správně, že tuhle situaci rozopznám až za běhu, že jo?
UPDATE: Ha, tak se omlouvám, konečně jsem si všimnul, že se to řeší o 5 stránek dřív
Hádám, že nic nového od té doby asi objeveno nebylo
Pochopil jsem správně, že tuhle situaci rozopznám až za běhu, že jo?
UPDATE: Ha, tak se omlouvám, konečně jsem si všimnul, že se to řeší o 5 stránek dřív
Hádám, že nic nového od té doby asi objeveno nebylo
Luk
- pcv
- Matfyz(ák|ačka) level I
- Příspěvky: 25
- Registrován: 13. 6. 2005 15:24
- Typ studia: Informatika Mgr.
- Bydliště: Praha
- Kontaktovat uživatele:
podivne chovani funkce compute_size()
Narazil jsem na podivne chovani jejich fce compute_size() pri volani na range_type_pointer. V jejich kodu:
jsem vydedukoval, ze by to melo vratit velikost toho range, ale ouha. Na vstup:
To pri generovani kodu pro prvni dimenzi pole dela toto:
Je to bug, nebo jsem nepochopil ucel teto fce?
Kód: Vybrat vše
/// compute the size of the type
/** the size is returned in stack units **/
stack_address compute_size() const { return this ? compute_size_() : 0; }
/// compute intermediate code physical type
/** returns the innermost element type for arrays
returns integer for range types
**/
Kód: Vybrat vše
var
cislo:integer;
polele: array[1..6,1..5] of integer;
...
cislo:=polele[2,3];
Kód: Vybrat vše
range_type_pointer rtp = ...;
int range_size = *( rtp->upperBound()) - *( rtp->lowerBound())+1;// ==6
int ble = rtp->compute_size();//==1
- rastik
- Supermatfyz(ák|ačka)
- Příspěvky: 661
- Registrován: 19. 10. 2005 21:45
- Typ studia: Informatika Mgr.
- Login do SIS: wartr3am
- Bydliště: Praha
- Kontaktovat uživatele:
Re: podivne chovani funkce compute_size()
Ten rozsah vobec nemusis pocitat. Pointer na to spravne miesto sa pocita ako (2-1)*(a[]->compute_size)+(3-1). Teda compute_size zavolas ->access_array()->element_type()->compute_size(). Uz to tu raz bolo rozpisane.pcv píše:Narazil jsem na podivne chovani jejich fce compute_size() pri volani na range_type_pointer.To pri generovani kodu pro prvni dimenzi pole dela toto:Kód: Vybrat vše
var cislo:integer; polele: array[1..6,1..5] of integer; ... cislo:=polele[2,3];
Je to bug, nebo jsem nepochopil ucel teto fce?Kód: Vybrat vše
range_type_pointer rtp = ...; int range_size = *( rtp->upperBound()) - *( rtp->lowerBound())+1;// ==6 int ble = rtp->compute_size();//==1
- pcv
- Matfyz(ák|ačka) level I
- Příspěvky: 25
- Registrován: 13. 6. 2005 15:24
- Typ studia: Informatika Mgr.
- Bydliště: Praha
- Kontaktovat uživatele:
Re: podivne chovani funkce compute_size()
aha, ja to pocitam trochu jinak: nejdriv nasobim offset ktery uz mam velikosti posledniho range a pak pricitam (3-1), jako u Hornerova schematu na prevod ciselneho stringu na cislo. Do dvou rozmeru to dela uplne stejne, od tri vys se to bude pocitat jinak, ale vysledek by mel byt stejny.rastik píše: Ten rozsah vobec nemusis pocitat. Pointer na to spravne miesto sa pocita ako (2-1)*(a[]->compute_size)+(3-1). Teda compute_size zavolas ->access_array()->element_type()->compute_size(). Uz to tu raz bolo rozpisane.
Ahoj, muzete mi prosim poradit jak zjistim typ pole? Nasel jsem jedine metodu
ktera mi vraci typ
ale nevim jetli je to spravne? dik
Kód: Vybrat vše
access_array()->compute_final_ptype()
Kód: Vybrat vše
mlaskal::physical_type
- pcv
- Matfyz(ák|ačka) level I
- Příspěvky: 25
- Registrován: 13. 6. 2005 15:24
- Typ studia: Informatika Mgr.
- Bydliště: Praha
- Kontaktovat uživatele:
Anonymous píše:Ahoj, muzete mi prosim poradit jak zjistim typ pole? Nasel jsem jedine metoduktera mi vraci typKód: Vybrat vše
access_array()->compute_final_ptype()
ale nevim jetli je to spravne? dikKód: Vybrat vše
mlaskal::physical_type
Kód: Vybrat vše
access_array()->element_type()->cat()
ja jsem ale myslel napr. array[1..6,2..9] of string; tak jak zjistim ten typ "string" ?pcv píše:Anonymous píše:Ahoj, muzete mi prosim poradit jak zjistim typ pole? Nasel jsem jedine metoduktera mi vraci typKód: Vybrat vše
access_array()->compute_final_ptype()
ale nevim jetli je to spravne? dikKód: Vybrat vše
mlaskal::physical_type
Kód: Vybrat vše
access_array()->element_type()->cat()
- Kate
- Matfyz(ák|ačka) level III
- Příspěvky: 146
- Registrován: 8. 1. 2005 10:52
- Typ studia: Informatika Mgr.
- Login do SIS: opock4am
- Bydliště: Milada squat
- Kontaktovat uživatele:
ono toto je to same co array[1..6] of array[2..9] of string.Anonymous píše: ja jsem ale myslel napr. array[1..6,2..9] of string; tak jak zjistim ten typ "string" ?
takze se proste v nejakym cyklu posouvas po "array" tak dlouho, az jednou neni typ prvku pole array, ale je to ten posledni typ (tady string)
Člověk si nemusí nic myslet, aby něco udělal.
typ pola
ja som pouzil takyto "trik" na zistenie typu pola:
Kód: Vybrat vše
if (...->access_array()->compute_final_ptype() == ctx->tab->logical_bool()->compute_final_ptype())....