tw_psycho Opublikowano 6 Czerwca 2006 Zgłoś Opublikowano 6 Czerwca 2006 (edytowane) witam, Przy kompilacji zwraca mi blad: [Error] Unit1.pas(31): Incompatible types [Error] Unit1.pas(32): Incompatible types [Fatal Error] Project2.dpr(5): Could not compile used unit 'Unit1.pas' unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);var x : Integer;begin x := 10; if x <> 100 or x < 100 then if x < 70 and not x = 50 then if x = 10 then showmessage('Tak to jest cyfra 10');end;end. co jest zle? Edytowane 6 Czerwca 2006 przez -Paluch- Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 6 Czerwca 2006 Zgłoś Opublikowano 6 Czerwca 2006 (edytowane) a czy nie mógłbyś ruszyć głową trochę? Jeśli juz tak trudno zajrzeć do helpa co znaczy ten błąd (F1 na errorze) to chociaż mogłeś wskazać która to jest linijka 31 i 32.. co ja mam liczyć teraz ręcznie? (pod warunkiem że wkleiłeś od początku) Domyślam się 1 spojrzeniem iż chodzi o linijki: if x <> 100 or x < 100 then if x < 70 and not x = 50 thena główny błąd polega na tym iż pascal inaczej rozumie sformułowania warunku jaki mu zadałeś przez wzgląd na to iż różne operatory mają różne priorytety wykonania. Zatem najpierw wykona Ci się 100 or x co w rezultacie zwróci wartość typu boolean = true a następnie to sprawdzasz czy jest różne od x, który jest typu integer czyli de facto robisz coś takiego: if integer <> boolean w praktyce, aby zmienić kolejnośc wykonywania operacji wykorzystuje się podobnie jak w matematyce, nawiasy () Napisz zatem kod następująco: if (x <> 100) or (x < 100) then if (x < 70) and not (x = 50) then Edytowane 6 Czerwca 2006 przez PelzaK Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
tw_psycho Opublikowano 6 Czerwca 2006 Zgłoś Opublikowano 6 Czerwca 2006 (edytowane) aa teraz rozumiem... tylko mnie zastanawia dlaczego przyklady z kursu sa niepoprawne... czy delphi 5 rozni sie tak bardzo od 7? wybacz nieprecyzyjnosc, poczatkujacy jestem, bardzo poczatkujacy :-) a teraz kolejny blad przy petli: [Error] Unit1.pas(40): ';' expected but '.' found [Error] Unit1.pas(47): Declaration expected but end of file found [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas' unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Memo: TMemo; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);var I : Integer;begin for i := 5 downto 0 do begin Sleep(500); Memo.Lines.Add( 'To zakonczenie programu pozostalo: ' + IntToStr (i));end; Sleep(1000); Close;end. pluje sie o te end. na koncu... ale jak je wytne to tez mu nie pasuje... Edytowane 6 Czerwca 2006 przez -Paluch- Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
SGJ Opublikowano 6 Czerwca 2006 Zgłoś Opublikowano 6 Czerwca 2006 A może procedury konczy się end;? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
tw_psycho Opublikowano 6 Czerwca 2006 Zgłoś Opublikowano 6 Czerwca 2006 wtedy tez wywala blad Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
SGJ Opublikowano 6 Czerwca 2006 Zgłoś Opublikowano 6 Czerwca 2006 Jak się nie mysli to wywala błędy... procedure TForm1.Button1Click(Sender: TObject);var I : Integer;begin for i := 5 downto 0 do begin Sleep(500); Memo1.Lines.Add( 'To zakonczenie programu pozostalo: ' + IntToStr (i));end; Sleep(1000); Close;end; Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
tw_psycho Opublikowano 7 Czerwca 2006 Zgłoś Opublikowano 7 Czerwca 2006 No wybaczcie, w delphi sie bawie od 4 dni. I nie wszystko jest dla mnie oczywiste. Mozecie byc pewni, ze nim napisze posta, to kombinuje i czytam wszystko 10 razy. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 7 Czerwca 2006 Zgłoś Opublikowano 7 Czerwca 2006 (edytowane) musisz wiedzieć o jednej zasadniczej rzeczy dotyczącej błędów... Nie zawsze błąd występuje w linii którą wywala kompilator w błędzie... Głównie jest to przyczyna tego iż gdy zabierzesz np 1 nawias to kompilator od razu zaczyna całkiem inaczej rozumieć cały kod... wydaje mu się że kolejne instrukcje w nowych linijkach tak naprawdę sa instrukcjami w nawiasie... Mówię oczywiście abstraciach!ąc od konkretnego przykładu U Ciebie.. [Error] Unit1.pas(40): ';' expected but '.' found - oznacza że w lini 40 kompilator oczekiwał znaku ';' ale znalazł '.'. Zazwyczaj teogo typu błąd oznacza tyle że wcześniej zapomniałeś zamknąc jakiś nawias, w tym przypadku nie zamknąłeś definicji procedury. [Error] Unit1.pas(47): Declaration expected but end of file found - Następny błąd jest juz spowodowany wystąpieniem poprzedniego.... Zabrakło Ci zamknięcia bloku procedury zatem kompilator sie dziwi że plik mu się skończył [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas' - no to już oczywiste.. skoro są błędy w składni to nie można skompilować całości... Edytowane 7 Czerwca 2006 przez PelzaK Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...