Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Angeblich nicht deklariert ?! (https://www.delphipraxis.net/137088-angeblich-nicht-deklariert.html)

aaaaaaaaaa_10 14. Jul 2009 06:10


Angeblich nicht deklariert ?!
 
Hallo,
ich hab das Problem, dass angeblich alles ab br19200 nicht deklariert ist, aber ist es doch oder?

Delphi-Quellcode:
TBaudrate = (br1200, br2400, br4800, br9600, [b]br19200, br38400, br57600[/b]);
Delphi-Quellcode:
case (theVerbParam.Baudrate) of
      br1200: comPort.Baud := 1200;
      br2400: comPort.Baud := 2400;
      br4800: comPort.Baud := 4800;
      br9600: comPort.Baud := 9600;
      br19200: comPort.Baud := 19200;
      br38400: comPort.Baud := 38400;
      br57600: comPort.Baud := 57600;
    end;
Ich weiß nicht, was es sein könnte.

alzaimar 14. Jul 2009 06:18

Re: Angeblich nicht deklariert ?!
 
TBaudrate gibt es 2x in deinem Code. Wenn 'TBaudrate' in der Unit 'FooBar' deklariert ist, dann deklariere 'theVerbParam.Baudrate' als 'Foobar.TBaudrate'.

aaaaaaaaaa_10 14. Jul 2009 06:23

Re: Angeblich nicht deklariert ?!
 
Hab ich das nicht?

Delphi-Quellcode:
TBaudrate = (br1200, br2400, br4800, br9600, br19200, br38400, br57600);
Delphi-Quellcode:
 TVerbParam = record
              ......
              Baudrate: TBaudrate;
              ......

mkinzler 14. Jul 2009 06:51

Re: Angeblich nicht deklariert ?!
 
Möglicherweise gibt es aber eine 2. davon abweuichende Deklaration des Typs.

hoika 14. Jul 2009 06:59

Re: Angeblich nicht deklariert ?!
 
Hallo,

Zitat:

Hab ich das nicht?
nein, hast du nicht.

Bsp.

Delphi-Quellcode:
unit_1;

interface

TBaudrate = (br1200, br2400, br4800, br9600, br19200, br38400, br57600);
unit_2;

uses
unit_1;


Delphi-Quellcode:
TVerbParam = record
              ......
              Baudrate: unit_1.TBaudrate;
              ......
Durch das unit_1.TBaudrate legst du explizit fest,
das der Typ aus unit_1 verwendet werden soll.

Ich hätte einfach TMyBaudrate geschrieben.


Heiko

aaaaaaaaaa_10 14. Jul 2009 07:04

Re: Angeblich nicht deklariert ?!
 
Aber die beiden Dinge sind doch in derselben Unit.

mkinzler 14. Jul 2009 07:05

Re: Angeblich nicht deklariert ?!
 
Die andere Variante aber nicht! :zwinker:

hoika 14. Jul 2009 07:20

Re: Angeblich nicht deklariert ?!
 
Hallo,

aha, gleiche Unit, könnte man ja auch mal hinschreiben ! ;)

also nochmal, gleiche unit_1

unit_1
TBaudrate = XXX

record
Baudrate: unit_1.TBaudrate;


Grund könnte sein, dass eine der Units im Interface
TBaudrate auch definiert, dann gilt diese als 1.

Am einfachsten mache es per TMyBaudrate oder TBaudrate_.


PS:
Ab D2009 giibt es namespaces, die sowas verhindern.
unit_1.TBaudrate ist eigentlich auch schon sowas.


Heiko

aaaaaaaaaa_10 14. Jul 2009 07:23

Re: Angeblich nicht deklariert ?!
 
Aber wie kommt es dass ein Teil (bis br9600) angeblich deklariert ist?

mkinzler 14. Jul 2009 07:32

Re: Angeblich nicht deklariert ?!
 
Zitat:

PS:
Ab D2009 giibt es namespaces, die sowas verhindern.
unit_1.TBaudrate ist eigentlich auch schon sowas.
Namespaces gibt es sogar seit D7

hoika 14. Jul 2009 07:40

Re: Angeblich nicht deklariert ?!
 
Hallo,

Zitat:

Aber wie kommt es dass ein Teil (bis br9600) angeblich deklariert ist?
Viell. weil das die andere Unit schon gemacht hat.

Kommentier mal den Code ab br9600 aus,
dann Ctrl + linke Maustaste auf TBaudrate, dann sollte die IDE
in die Unit springen, wo es für den Compiler definiert ist.

Viell. reicht es auch, die Maus darüber zu ziehen (Tool-Tip).


Hast du das unit_1.TBaudrate denn schon mal ausprobiert ?


Heiko

aaaaaaaaaa_10 14. Jul 2009 07:53

Re: Angeblich nicht deklariert ?!
 
Zitat:

Hast du das unit_1.TBaudrate denn schon mal ausprobiert ?
Ja,hab ich,aber macht keinen Unterschied.

Wenn ich mir den Hinweis anzeigen lassen (mit Maus drüber fahren) steht das da :
Delphi-Quellcode:
type DGLoabls.TBaudrate: br1200..br57600 - DGloabls.pas

hoika 14. Jul 2009 08:02

Re: Angeblich nicht deklariert ?!
 
Hallo,

da hast du die Unit, die es schon definiert hat.
Falls sie nicht im Interface deiner eigenen Unit steht,
wird sie von einer der Interface-Units selber referenziert.

Aber:
ein unit_1.TBaudrate in deinem Record muss funktionieren.

Zeig doch mal deine komplette Unit.


Heiko

aaaaaaaaaa_10 14. Jul 2009 08:35

Re: Angeblich nicht deklariert ?!
 
Wäre zu viel... Die Unit, wo die Var deklariert sind, hatte ich eingebunden in der Unit, wo ich sie benutze

hoika 14. Jul 2009 08:42

Re: Angeblich nicht deklariert ?!
 
Hallo,

was steht eigentlich, wenn du per Maus auf

br1200 im Case gehst ?

Ich denke, auch dort nimmt er das aus der anderen Unit.

Als Trick könntest deine TBaudrate Definition in eine eigene
Unit packen und die als erstes in Interface-Teil reinpacken.

U.U. funktioniert dann aber die andere Unit nicht ...


#update:#
Was passiert eigentlich, wenn du das TBaudrate ins Implementation packst ?

Oder du machst folgendes:
Delphi-Quellcode:
type
  TBaudRate = Integer;
const
  c_br1200 = 0;
  c_br2400 = 1;
#update2:#
Hast du den Qellcode der DGloabls Unit ?
Ist dort der 19200 definiert ?


Heiko

hoika 14. Jul 2009 08:58

Re: Angeblich nicht deklariert ?!
 
Hallo

Zitat:

Aber die beiden Dinge sind doch in derselben Unit.
Zitat:

Wäre zu viel... Die Unit, wo die Var deklariert sind, hatte ich eingebunden in der Unit, wo ich sie benutze
Was ist denn nun definiert, Variablen oder Typen ?
Doch 2 Units ?



Heiko

aaaaaaaaaa_10 14. Jul 2009 09:05

Re: Angeblich nicht deklariert ?!
 
Zitat:

was steht eigentlich, wenn du per Maus auf

br1200 im Case gehst ?
Da kommt nix.

Zitat:

Hast du den Qellcode der DGloabls Unit ?
Ist dort der 19200 definiert ?

Den Quellcode hab ich,aber da ist nix von den ganzen brxxxx definiert

aaaaaaaaaa_10 14. Jul 2009 09:07

Re: Angeblich nicht deklariert ?!
 
Delphi-Quellcode:
 TBaudrate = (br1200, br2400, br4800, br9600, br19200, br38400, br57600);

TVerbParam = record
    Baudrate: TBaudrate;
Das steht in Unit1 und das:
Delphi-Quellcode:
 case (theVerbParam.Baudrate) of
      br1200: comPort.Baud := 1200;
      br2400: comPort.Baud := 2400;
      br4800: comPort.Baud := 4800;
      br9600: comPort.Baud := 9600;
      br19200: comPort.Baud := 19200;
      br38400: comPort.Baud := 38400;
      br57600: comPort.Baud := 57600;
    end;
in Unit2. Unit1 habe ich in Unit2 eingebunden

hoika 14. Jul 2009 09:18

Re: Angeblich nicht deklariert ?!
 
Hallo,

Und das folgende hast du schon versucht ?
Delphi-Quellcode:
TVerbParam = record
    Baudrate: Unit1.TBaudrate;
Ansonsten, ohne (nicht funktionierendes) Minimal-Bsp. ist dir nicht zu helfen.

Auf jeden Fall ist es ein Typ-Konflikt mit einem gleichlautenden Typ einer anderen Unit (DGlobals).

Was für ein Delphi hast du denn ?

Wie sieht TBaudrate in der DGlobals aus ?


Heiko

aaaaaaaaaa_10 14. Jul 2009 09:24

Re: Angeblich nicht deklariert ?!
 
ja,das hab ich probiert.

delphi6 hab ich.

mich wundert es halt nur, dass die ertsten 4 def erkannt werden und die letzten 3 nicht...

:?: :?: :?:

Delphi-Quellcode:
TBaudrate = (br1200, br2400, br4800, br9600, br19200, br38400, br57600);
so sieht das in DGlobals.pas aus

hoika 14. Jul 2009 09:29

Re: Angeblich nicht deklariert ?!
 
Hallo,

packe mal die DGlobals.pas als erstes in deine beiden (units) rein,
und lasse deine TBaudrate weg.
Es könnte sein, dass noch eine Unit TBaudrate definiert und dort halt
nur die ersten 4.

Kannst dich ja mal per grep (wingrep emfehle ich) durch die Units graben.


BTW:
Bei der damaligen Umstellung von D2 auf D5 hatten die plötzlich
eine Unit Types, ich musste meine dann umbenennen (in MyTypes).


Heiko

aaaaaaaaaa_10 14. Jul 2009 09:56

Re: Angeblich nicht deklariert ?!
 
habs an erste stelle gepackt,aber kein unterschied.

Hab mich durchgegraben,aber keine überschneidende deklaration gefunden..

verzweifel gleich.

guidok 14. Jul 2009 09:59

Re: Angeblich nicht deklariert ?!
 
Zitat:

Zitat von aaaaaaaaaa_10
habs an erste stelle gepackt,aber kein unterschied.

Hab mich durchgegraben,aber keine überschneidende deklaration gefunden..

verzweifel gleich.

Hast du deinen Typ mal probehalber umbenannt?

aaaaaaaaaa_10 14. Jul 2009 10:03

Re: Angeblich nicht deklariert ?!
 
ja,hab ich auch schon gemacht..aber weiterhin so

hoika 14. Jul 2009 10:58

Re: Angeblich nicht deklariert ?!
 
Hallo,

komplett umbenannt ?

type
TMyBaudrate = (_br1200, _br2400, _br4800, _br9600, _br19200, _br38400, _br57600);


Da kommt mir übrigens ein schlimmer Verdacht ;)

Kann es sein,
dass in deinem case statt

br19200 ein brl9200 steht ??? also statt der 1 ein kleines L ?


Heiko

aaaaaaaaaa_10 15. Jul 2009 06:16

Re: Angeblich nicht deklariert ?!
 
Ja, alles umbenannt und nein leider kein kleines L anstatt ner 1

hoika 15. Jul 2009 06:54

Re: Angeblich nicht deklariert ?!
 
Hallo,

auch im case ?

Zeig noch mal den jetzigen Code.

Du machst irgendwas anderes verkehrt.
Was passiert, wenn du nur den 19200er case mal auskommentierst.

Ich glauhbe, helfen können wir nur,
wenn du ein Minimal-Bsp. hier reinstellst,
das sich ohne die >=19200 (auskommentierst) kompilieren lässt.

Viell. solltest du genauso mal beginnen.
Kommentier alles aus, was für das Zeigen des Problems nicht
notwendig ist, vor allem jegliche nicht nötigen Units.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz