Typ lässt sich nicht redefinieren. Fehler: Doppelter Bezeich
Typ lässt sich nicht redefinieren. Fehler: Doppelter Bezeich
Hallo,
was ist da los. Bisher wird ein schon existenter Typ, den ich nochmals definiere, einfach redefiniert. Ich bekomme aber den Fehler doppelter Bezeichner. Kann ich da was machen?
Ich will im Zweifelsfall die fraglichen Typen redefinieren.
Wie muss ich vorgehen?
was ist da los. Bisher wird ein schon existenter Typ, den ich nochmals definiere, einfach redefiniert. Ich bekomme aber den Fehler doppelter Bezeichner. Kann ich da was machen?
Ich will im Zweifelsfall die fraglichen Typen redefinieren.
Wie muss ich vorgehen?
-
- Beiträge: 351
- Registriert: Mi 25. Nov 2015, 17:06
- OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
- CPU-Target: i386 + x86_64
- Wohnort: in der Nähe von Stuttgart
- Kontaktdaten:
Re: Typ lässt sich nicht redefinieren. Fehler: Doppelter Bez
Hast vielleicht etwas Code? Dann kann man einfacher helfen.
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Re: Typ lässt sich nicht redefinieren. Fehler: Doppelter Bez
[code]
type
WINBOOL = longbool;
[/quote]
Fehlermeldung:
Error: duplicate identifier "WINBOOL"
Hint : identifier alredy defined in <filename> at line xx
xx ist genau diejenige Zeile, in der ich "WINBOOL" definiert habe.
Wenn ich die WINBOOL Typdefinition auskommentiere, erhalte ich die Fehlermeldung:
Error: identifier not found: "WINBOOL"
Sind etwa betriebssystemabhängige Datentypen vom Compiler vordefiniert, wie die Integer Typen?
Ich programmiere unter Knoppix 7.6.
Ziel Betriebssystem ist Voreinstellung. Da ich Lazarus für Linux nutze, gehe ich davon aus, dass dann auch die Zielplattform Linux eingestellt ist.
Unter Zielplattform Windows akzeptiert der Compiler diesen Datentyp.
Ich kann mir beim besten Willen nicht vorstellen, dass das an meinem sonstigen Code liegt.
type
WINBOOL = longbool;
[/quote]
Fehlermeldung:
Error: duplicate identifier "WINBOOL"
Hint : identifier alredy defined in <filename> at line xx
xx ist genau diejenige Zeile, in der ich "WINBOOL" definiert habe.
Wenn ich die WINBOOL Typdefinition auskommentiere, erhalte ich die Fehlermeldung:
Error: identifier not found: "WINBOOL"
Sind etwa betriebssystemabhängige Datentypen vom Compiler vordefiniert, wie die Integer Typen?
Ich programmiere unter Knoppix 7.6.
Ziel Betriebssystem ist Voreinstellung. Da ich Lazarus für Linux nutze, gehe ich davon aus, dass dann auch die Zielplattform Linux eingestellt ist.
Unter Zielplattform Windows akzeptiert der Compiler diesen Datentyp.
Ich kann mir beim besten Willen nicht vorstellen, dass das an meinem sonstigen Code liegt.
-
- Beiträge: 351
- Registriert: Mi 25. Nov 2015, 17:06
- OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
- CPU-Target: i386 + x86_64
- Wohnort: in der Nähe von Stuttgart
- Kontaktdaten:
Re: Typ lässt sich nicht redefinieren. Fehler: Doppelter Bez
Was passiert wenn du "WINBOOL" am Definitionspunkt und an sämtlichen Nutzungspunkten umbenennst?
edit: Außerdem frage ich mich, wozu du das überhaupt brauchst, weil WINBOOL = LongBool = LongInt, der nur 0 und 1 benutzt.
edit: Außerdem frage ich mich, wozu du das überhaupt brauchst, weil WINBOOL = LongBool = LongInt, der nur 0 und 1 benutzt.
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Re: Typ lässt sich nicht redefinieren. Fehler: Doppelter Bez
compmgmt hat geschrieben:Was passiert wenn du "WINBOOL" am Definitionspunkt und an sämtlichen Nutzungspunkten umbenennst?
edit: Außerdem frage ich mich, wozu du das überhaupt brauchst, weil WINBOOL = LongBool = LongInt, der nur 0 und 1 benutzt.
Habe den WINBOOL Bezeichner jetzt in WBOOL umbenannt. "Suchen->Ersetzen->Alle Ersetzen".
Läuft erst mal durch, macht aber in allen Dateien, in denen der WINBOOL Bezeichner auftaucht, die Umbenennung nötig.
WINBOOL ist aber auch in der Include-Datei Base.inc definiert. Ich habe diese Datei in gdi_base.inc umbenannt und verwende diese.
Bitte nicht fragen, warum ich das mache, ich will die Originaldateien hier nicht antasten und frage nur, warum es dieses Problem gibt.
Warum erkennt der Compiler WINBOOL nicht an, obwohl er den unter Windows einwandfrei anerkennt und ich Programme für Windows ohne dieses Probem übersetzen kann. Warum macht der Compiler bei Übersetzung für andere Plattformen, in meinem Fall Linux, hier Stress? Ein Compiler sollte da egal unter welcher Plattform er arbeitet, keine Unterschiede machen, der soll nicht wissen, wozu ich das brauche.
Ich brauche das, weil unter Windows dieser Bezeichner "WINBOOL" in der Datei "base.inc" so defininiert ist und ich die Windows Teile einfach unverändert übernehmen will. Zumindest will ich an den Typdefinitionen nichts ändern.
.
-
- Beiträge: 351
- Registriert: Mi 25. Nov 2015, 17:06
- OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
- CPU-Target: i386 + x86_64
- Wohnort: in der Nähe von Stuttgart
- Kontaktdaten:
Re: Typ lässt sich nicht redefinieren. Fehler: Doppelter Bez
Dann kannst du auch einfach LongBool benutzen. Weil WINBOOL = LongBool. Kleines Beispiel:thosch hat geschrieben:Ich brauche das, weil unter Windows dieser Bezeichner "WINBOOL" in der Datei "base.inc" so defininiert ist und ich die Windows Teile einfach unverändert übernehmen will. Zumindest will ich an den Typdefinitionen nichts ändern.
Code: Alles auswählen
type
TA = LongBool;
TB = LongBool;
procedure Test(a: TA); // Prozedur erwartet Typ TA
begin
if a then ... // a = true
else ... // a = false
end;
procedure Beispiel;
begin
Test(TB(true)); // ich übergebe Typ TB
end;
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Re: Typ lässt sich nicht redefinieren. Fehler: Doppelter Bez
Also das folgende Programm läuft auch unter Linux problemlos:
Um zu sagen, warum dein Programm den Fehler zeigt, musst du schon mehr zeigen als nur die Deklaration von WINBOOL.
Code: Alles auswählen
program Project1;
{$mode objfpc}{$H+}
type
WINBOOL = longbool;
begin
WriteLn(boolean(1=1));
WriteLn(boolean(1=0));
WriteLn(WINBOOL(1=1));
WriteLn(WINBOOL(1=0));
end.
Um zu sagen, warum dein Programm den Fehler zeigt, musst du schon mehr zeigen als nur die Deklaration von WINBOOL.
Re: Typ lässt sich nicht redefinieren. Fehler: Doppelter Bez
Aus base.inc alias gdi_base.inc
qtwinapi:
Das Präfix "gdi_" habe ich davor gesetzt und die Includedateien in einen separaten Ordner kopiert. Im Grunde handelt es sich um jene .inc Dateien, in denen sich die Windows Definitionen befinden. defines.inc, base.inc, struct.inc.
Weil ich die Originaldateien nicht antasten will, habe ich mir die in einen eigenen Ordner kopiert und mit dem Präfix "gdi_" versehen.
Diesen Fehler habe ich somit, siehe Kommentar, inzwischen selber gefunden. Nun aber spinnt er bei den Konstanten rum.
In defines.inc -> alias gdi_defines.inc folgende Meldungen:
Hier ein Codeauszug: (entspricht der Datei "defines.inc")
Projekt kompilieren, Ziel: wapi: Exit code 256, Fehler: 50, Hinweise: 51
gdi_defines.inc(1205,39) Hint: Conversion between ordinals and pointers is not portable
gdi_defines.inc(1206,37) Hint: Conversion between ordinals and pointers is not portable
gdi_defines.inc(51,20) Error: Duplicate identifier "MAX_PATH"
gdi_defines.inc(51,20) Hint: Identifier already defined in gdi_defines.inc at line 51
gdi_defines.inc(52,22) Error: Duplicate identifier "LF_FACESIZE"
gdi_defines.inc(52,22) Hint: Identifier already defined in gdi_defines.inc at line 52
gdi_defines.inc(53,26) Error: Duplicate identifier "LF_FULLFACESIZE"
gdi_defines.inc(53,26) Hint: Identifier already defined in gdi_defines.inc at line 53
gdi_defines.inc(54,25) Error: Duplicate identifier "ELF_VENDOR_SIZE"
gdi_defines.inc(54,25) Hint: Identifier already defined in gdi_defines.inc at line 54
gdi_defines.inc(55,34) Error: Duplicate identifier "SECURITY_STATIC_TRACKING"
gdi_defines.inc(55,34) Hint: Identifier already defined in gdi_defines.inc at line 55
gdi_defines.inc(56,35) Error: Duplicate identifier "SECURITY_DYNAMIC_TRACKING"
gdi_defines.inc(56,35) Hint: Identifier already defined in gdi_defines.inc at line 56
gdi_defines.inc(57,25) Error: Duplicate identifier "MAX_DEFAULTCHAR"
gdi_defines.inc(57,25) Hint: Identifier already defined in gdi_defines.inc at line 57
gdi_defines.inc(58,24) Error: Duplicate identifier "MAX_LEADBYTES"
gdi_defines.inc(58,24) Hint: Identifier already defined in gdi_defines.inc at line 58
gdi_defines.inc(59,39) Error: Duplicate identifier "EXCEPTION_MAXIMUM_PARAMETERS"
gdi_defines.inc(59,39) Hint: Identifier already defined in gdi_defines.inc at line 59
gdi_defines.inc(60,24) Error: Duplicate identifier "CCHDEVICENAME"
gdi_defines.inc(60,24) Hint: Identifier already defined in gdi_defines.inc at line 60
gdi_defines.inc(61,22) Error: Duplicate identifier "CCHFORMNAME"
gdi_defines.inc(61,22) Hint: Identifier already defined in gdi_defines.inc at line 61
gdi_defines.inc(62,24) Error: Duplicate identifier "MENU_TEXT_LEN"
gdi_defines.inc(62,24) Hint: Identifier already defined in gdi_defines.inc at line 62
gdi_defines.inc(63,20) Error: Duplicate identifier "MAX_LANA"
gdi_defines.inc(63,20) Hint: Identifier already defined in gdi_defines.inc at line 63
gdi_defines.inc(64,19) Error: Duplicate identifier "NCBNAMSZ"
gdi_defines.inc(64,19) Hint: Identifier already defined in gdi_defines.inc at line 64
gdi_defines.inc(65,27) Error: Duplicate identifier "NETBIOS_NAME_LEN"
gdi_defines.inc(65,27) Hint: Identifier already defined in gdi_defines.inc at line 65
gdi_defines.inc(66,27) Error: Duplicate identifier "OFS_MAXPATHNAME"
gdi_defines.inc(66,27) Hint: Identifier already defined in gdi_defines.inc at line 66
gdi_defines.inc(67,24) Error: Duplicate identifier "MAX_TAB_STOPS"
gdi_defines.inc(67,24) Hint: Identifier already defined in gdi_defines.inc at line 67
gdi_defines.inc(68,23) Error: Duplicate identifier "ANYSIZE_ARRAY"
gdi_defines.inc(68,23) Hint: Identifier already defined in gdi_defines.inc at line 68
gdi_defines.inc(69,33) Error: Duplicate identifier "RAS_MaxCallbackNumber"
gdi_defines.inc(69,33) Hint: Identifier already defined in gdi_defines.inc at line 69
gdi_defines.inc(70,29) Error: Duplicate identifier "RAS_MaxDeviceName"
gdi_defines.inc(70,29) Hint: Identifier already defined in gdi_defines.inc at line 70
gdi_defines.inc(71,28) Error: Duplicate identifier "RAS_MaxDeviceType"
gdi_defines.inc(71,28) Hint: Identifier already defined in gdi_defines.inc at line 71
gdi_defines.inc(72,28) Error: Duplicate identifier "RAS_MaxEntryName"
gdi_defines.inc(72,28) Hint: Identifier already defined in gdi_defines.inc at line 72
gdi_defines.inc(73,27) Error: Duplicate identifier "RAS_MaxIpAddress"
gdi_defines.inc(73,27) Hint: Identifier already defined in gdi_defines.inc at line 73
gdi_defines.inc(74,28) Error: Duplicate identifier "RAS_MaxIpxAddress"
gdi_defines.inc(74,28) Hint: Identifier already defined in gdi_defines.inc at line 74
gdi_defines.inc(75,30) Error: Duplicate identifier "RAS_MaxPhoneNumber"
gdi_defines.inc(75,30) Hint: Identifier already defined in gdi_defines.inc at line 75
gdi_defines.inc(76,17) Error: Duplicate identifier "UNLEN"
gdi_defines.inc(76,17) Hint: Identifier already defined in gdi_defines.inc at line 76
gdi_defines.inc(77,17) Error: Duplicate identifier "PWLEN"
gdi_defines.inc(77,17) Hint: Identifier already defined in gdi_defines.inc at line 77
gdi_defines.inc(78,16) Error: Duplicate identifier "CNLEN"
gdi_defines.inc(78,16) Hint: Identifier already defined in gdi_defines.inc at line 78
gdi_defines.inc(79,16) Error: Duplicate identifier "DNLEN"
gdi_defines.inc(79,16) Hint: Identifier already defined in gdi_defines.inc at line 79
gdi_defines.inc(81,26) Error: Duplicate identifier "MAXDWORD"
gdi_defines.inc(81,26) Hint: Identifier already defined in gdi_defines.inc at line 81
gdi_defines.inc(82,21) Error: Duplicate identifier "MAXWORD"
gdi_defines.inc(82,21) Hint: Identifier already defined in gdi_defines.inc at line 82
gdi_defines.inc(83,19) Error: Duplicate identifier "MAXBYTE"
gdi_defines.inc(83,19) Hint: Identifier already defined in gdi_defines.inc at line 83
gdi_defines.inc(85,19) Error: Duplicate identifier "MINCHAR"
gdi_defines.inc(85,19) Hint: Identifier already defined in gdi_defines.inc at line 85
gdi_defines.inc(86,19) Error: Duplicate identifier "MAXCHAR"
gdi_defines.inc(86,19) Hint: Identifier already defined in gdi_defines.inc at line 86
gdi_defines.inc(87,22) Error: Duplicate identifier "MINSHORT"
gdi_defines.inc(87,22) Hint: Identifier already defined in gdi_defines.inc at line 87
gdi_defines.inc(88,22) Error: Duplicate identifier "MAXSHORT"
gdi_defines.inc(88,22) Hint: Identifier already defined in gdi_defines.inc at line 88
gdi_defines.inc(89,25) Error: Duplicate identifier "MINLONG"
gdi_defines.inc(89,25) Hint: Identifier already defined in gdi_defines.inc at line 89
gdi_defines.inc(90,25) Error: Duplicate identifier "MAXLONG"
gdi_defines.inc(90,25) Hint: Identifier already defined in gdi_defines.inc at line 90
gdi_defines.inc(92,20) Error: Duplicate identifier "FILE_BEGIN"
gdi_defines.inc(92,20) Hint: Identifier already defined in gdi_defines.inc at line 92
gdi_defines.inc(93,22) Error: Duplicate identifier "FILE_CURRENT"
gdi_defines.inc(93,22) Hint: Identifier already defined in gdi_defines.inc at line 93
gdi_defines.inc(94,18) Error: Duplicate identifier "FILE_END"
gdi_defines.inc(94,18) Hint: Identifier already defined in gdi_defines.inc at line 94
gdi_defines.inc(96,17) Error: Duplicate identifier "OF_READ"
gdi_defines.inc(96,17) Hint: Identifier already defined in gdi_defines.inc at line 96
gdi_defines.inc(97,22) Error: Duplicate identifier "OF_READWRITE"
gdi_defines.inc(97,22) Hint: Identifier already defined in gdi_defines.inc at line 97
gdi_defines.inc(98,18) Error: Duplicate identifier "OF_WRITE"
gdi_defines.inc(98,18) Hint: Identifier already defined in gdi_defines.inc at line 98
gdi_defines.inc(99,25) Error: Duplicate identifier "OF_SHARE_COMPAT"
gdi_defines.inc(99,25) Hint: Identifier already defined in gdi_defines.inc at line 99
gdi_defines.inc(100,29) Error: Duplicate identifier "OF_SHARE_DENY_NONE"
gdi_defines.inc(100,29) Hint: Identifier already defined in gdi_defines.inc at line 100
gdi_defines.inc(101,29) Error: Duplicate identifier "OF_SHARE_DENY_READ"
gdi_defines.inc(101,29) Hint: Identifier already defined in gdi_defines.inc at line 101
gdi_defines.inc(102,30) Error: Duplicate identifier "OF_SHARE_DENY_WRITE"
gdi_defines.inc(102,30) Hint: Identifier already defined in gdi_defines.inc at line 102
gdi_defines.inc(103,29) Error: Duplicate identifier "OF_SHARE_EXCLUSIVE"
gdi_defines.inc(103,29) Hint: Identifier already defined in gdi_defines.inc at line 103
gdi_defines.inc(104,22) Error: Duplicate identifier "OF_CANCEL"
Code: Alles auswählen
{$ifdef read_interface}
{$PACKRECORDS C}
type
ATOM = word; //das hatte ich zunächst auskommentiert, sonst kommt die Fehlermeldung schon hier:
TAtom = ATOM; //Error: duplicate identifier "ATOM"
CALTYPE = cardinal;
CALID = cardinal;
WINBOOL = longbool; //Wenn ich von "ATOM" bis "CALID" auskommentiere, erhalte ich hier die Fehlermeldung:
BOOL = WINBOOL; //Error: duplicate identifier "WINBOOL"
CCHAR = char;
Code: Alles auswählen
program wapi;
uses qtwinapi;
begin
writeln('Ãœbersetzung erfolgreich!');
writeln('Zurück mit < E N T E R > ... ');
readln;
end. \0
qtwinapi:
Code: Alles auswählen
unit qtwinapi;
interface
{$ifdef microwindows}
{$LINK images} // hier uninteressant, da "microwindows" NICHT definiert ist.
{$LINK mwin}
{$LINK nano-X}
{$endif}
{$ifdef read_implementation}
{$undef read_implementation}
{$endif}
{$define read_interface}
{$i gdi_base.inc}
{$i gdi_defines.inc}
$i gdi_base.inc} // H I E R liegt mein FEHLER. Inzwischen bereinigt, Zeile gelöscht
{$i gdi_Struct.inc}
CONST
AD_COUNTERCLOCKWISE = 1;
AD_CLOCKWISE = 2;
DIFFERENCE = 11;
AdjustedDirection : int = AD_COUNTERCLOCKWISE;
ROP4 = $0000AACC;
DSTERASE = $00220326;
DSTCOPY = $00AA0029;
{
type
TOSVERSIONINFO = record
dwOSVersionInfoSize: DWORD;
dwMajorVersion: DWORD;
dwMinorVersion: DWORD;
dwBuildNumber: DWORD;
dwPlatformId: DWORD;
szCSDVersion: array[0..127] of Char;
end;
OSVERSIONINFO = TOSVERSIONINFO;
}
{$i qtwapih.inc} {(qt)(w)in (api) (h)eader}
implementation
uses
mwindefs, wmacros, winfont, wingdi, gfx_wnd;
{$undef read_interface}
{$define read_implementation}
{$i gdi_defines.inc}
{$i gdi_base.inc}
{$i gdi_struct.inc}
{$i qtwapii.inc} {(qt)(w)in (api)(i)mplementation}
end. \0
Das Präfix "gdi_" habe ich davor gesetzt und die Includedateien in einen separaten Ordner kopiert. Im Grunde handelt es sich um jene .inc Dateien, in denen sich die Windows Definitionen befinden. defines.inc, base.inc, struct.inc.
Weil ich die Originaldateien nicht antasten will, habe ich mir die in einen eigenen Ordner kopiert und mit dem Präfix "gdi_" versehen.
Diesen Fehler habe ich somit, siehe Kommentar, inzwischen selber gefunden. Nun aber spinnt er bei den Konstanten rum.
In defines.inc -> alias gdi_defines.inc folgende Meldungen:
Hier ein Codeauszug: (entspricht der Datei "defines.inc")
Code: Alles auswählen
{$ifdef read_interface}
{$PACKRECORDS C}
const
//UNICODE_NULL = WCHAR(#0);
MAX_PATH = 260;
LF_FACESIZE = 32;
LF_FULLFACESIZE = 64;
ELF_VENDOR_SIZE = 4;
SECURITY_STATIC_TRACKING = 0;
SECURITY_DYNAMIC_TRACKING = 1;
MAX_DEFAULTCHAR = 2;
MAX_LEADBYTES = 12;
EXCEPTION_MAXIMUM_PARAMETERS = 15;
CCHDEVICENAME = 32;
CCHFORMNAME = 32;
MENU_TEXT_LEN = 40;
MAX_LANA = 254;
NCBNAMSZ = 16;
NETBIOS_NAME_LEN = 16;
OFS_MAXPATHNAME = 128;
MAX_TAB_STOPS = 32;
ANYSIZE_ARRAY = 1;
RAS_MaxCallbackNumber = 128;
RAS_MaxDeviceName = 128;
RAS_MaxDeviceType = 16;
RAS_MaxEntryName = 256;
RAS_MaxIpAddress = 15;
RAS_MaxIpxAddress = 21;
RAS_MaxPhoneNumber = 128;
UNLEN = 256;
PWLEN = 256;
CNLEN = 15;
DNLEN = 15;
{ Unsigned types max }
\0
Projekt kompilieren, Ziel: wapi: Exit code 256, Fehler: 50, Hinweise: 51
gdi_defines.inc(1205,39) Hint: Conversion between ordinals and pointers is not portable
gdi_defines.inc(1206,37) Hint: Conversion between ordinals and pointers is not portable
gdi_defines.inc(51,20) Error: Duplicate identifier "MAX_PATH"
gdi_defines.inc(51,20) Hint: Identifier already defined in gdi_defines.inc at line 51
gdi_defines.inc(52,22) Error: Duplicate identifier "LF_FACESIZE"
gdi_defines.inc(52,22) Hint: Identifier already defined in gdi_defines.inc at line 52
gdi_defines.inc(53,26) Error: Duplicate identifier "LF_FULLFACESIZE"
gdi_defines.inc(53,26) Hint: Identifier already defined in gdi_defines.inc at line 53
gdi_defines.inc(54,25) Error: Duplicate identifier "ELF_VENDOR_SIZE"
gdi_defines.inc(54,25) Hint: Identifier already defined in gdi_defines.inc at line 54
gdi_defines.inc(55,34) Error: Duplicate identifier "SECURITY_STATIC_TRACKING"
gdi_defines.inc(55,34) Hint: Identifier already defined in gdi_defines.inc at line 55
gdi_defines.inc(56,35) Error: Duplicate identifier "SECURITY_DYNAMIC_TRACKING"
gdi_defines.inc(56,35) Hint: Identifier already defined in gdi_defines.inc at line 56
gdi_defines.inc(57,25) Error: Duplicate identifier "MAX_DEFAULTCHAR"
gdi_defines.inc(57,25) Hint: Identifier already defined in gdi_defines.inc at line 57
gdi_defines.inc(58,24) Error: Duplicate identifier "MAX_LEADBYTES"
gdi_defines.inc(58,24) Hint: Identifier already defined in gdi_defines.inc at line 58
gdi_defines.inc(59,39) Error: Duplicate identifier "EXCEPTION_MAXIMUM_PARAMETERS"
gdi_defines.inc(59,39) Hint: Identifier already defined in gdi_defines.inc at line 59
gdi_defines.inc(60,24) Error: Duplicate identifier "CCHDEVICENAME"
gdi_defines.inc(60,24) Hint: Identifier already defined in gdi_defines.inc at line 60
gdi_defines.inc(61,22) Error: Duplicate identifier "CCHFORMNAME"
gdi_defines.inc(61,22) Hint: Identifier already defined in gdi_defines.inc at line 61
gdi_defines.inc(62,24) Error: Duplicate identifier "MENU_TEXT_LEN"
gdi_defines.inc(62,24) Hint: Identifier already defined in gdi_defines.inc at line 62
gdi_defines.inc(63,20) Error: Duplicate identifier "MAX_LANA"
gdi_defines.inc(63,20) Hint: Identifier already defined in gdi_defines.inc at line 63
gdi_defines.inc(64,19) Error: Duplicate identifier "NCBNAMSZ"
gdi_defines.inc(64,19) Hint: Identifier already defined in gdi_defines.inc at line 64
gdi_defines.inc(65,27) Error: Duplicate identifier "NETBIOS_NAME_LEN"
gdi_defines.inc(65,27) Hint: Identifier already defined in gdi_defines.inc at line 65
gdi_defines.inc(66,27) Error: Duplicate identifier "OFS_MAXPATHNAME"
gdi_defines.inc(66,27) Hint: Identifier already defined in gdi_defines.inc at line 66
gdi_defines.inc(67,24) Error: Duplicate identifier "MAX_TAB_STOPS"
gdi_defines.inc(67,24) Hint: Identifier already defined in gdi_defines.inc at line 67
gdi_defines.inc(68,23) Error: Duplicate identifier "ANYSIZE_ARRAY"
gdi_defines.inc(68,23) Hint: Identifier already defined in gdi_defines.inc at line 68
gdi_defines.inc(69,33) Error: Duplicate identifier "RAS_MaxCallbackNumber"
gdi_defines.inc(69,33) Hint: Identifier already defined in gdi_defines.inc at line 69
gdi_defines.inc(70,29) Error: Duplicate identifier "RAS_MaxDeviceName"
gdi_defines.inc(70,29) Hint: Identifier already defined in gdi_defines.inc at line 70
gdi_defines.inc(71,28) Error: Duplicate identifier "RAS_MaxDeviceType"
gdi_defines.inc(71,28) Hint: Identifier already defined in gdi_defines.inc at line 71
gdi_defines.inc(72,28) Error: Duplicate identifier "RAS_MaxEntryName"
gdi_defines.inc(72,28) Hint: Identifier already defined in gdi_defines.inc at line 72
gdi_defines.inc(73,27) Error: Duplicate identifier "RAS_MaxIpAddress"
gdi_defines.inc(73,27) Hint: Identifier already defined in gdi_defines.inc at line 73
gdi_defines.inc(74,28) Error: Duplicate identifier "RAS_MaxIpxAddress"
gdi_defines.inc(74,28) Hint: Identifier already defined in gdi_defines.inc at line 74
gdi_defines.inc(75,30) Error: Duplicate identifier "RAS_MaxPhoneNumber"
gdi_defines.inc(75,30) Hint: Identifier already defined in gdi_defines.inc at line 75
gdi_defines.inc(76,17) Error: Duplicate identifier "UNLEN"
gdi_defines.inc(76,17) Hint: Identifier already defined in gdi_defines.inc at line 76
gdi_defines.inc(77,17) Error: Duplicate identifier "PWLEN"
gdi_defines.inc(77,17) Hint: Identifier already defined in gdi_defines.inc at line 77
gdi_defines.inc(78,16) Error: Duplicate identifier "CNLEN"
gdi_defines.inc(78,16) Hint: Identifier already defined in gdi_defines.inc at line 78
gdi_defines.inc(79,16) Error: Duplicate identifier "DNLEN"
gdi_defines.inc(79,16) Hint: Identifier already defined in gdi_defines.inc at line 79
gdi_defines.inc(81,26) Error: Duplicate identifier "MAXDWORD"
gdi_defines.inc(81,26) Hint: Identifier already defined in gdi_defines.inc at line 81
gdi_defines.inc(82,21) Error: Duplicate identifier "MAXWORD"
gdi_defines.inc(82,21) Hint: Identifier already defined in gdi_defines.inc at line 82
gdi_defines.inc(83,19) Error: Duplicate identifier "MAXBYTE"
gdi_defines.inc(83,19) Hint: Identifier already defined in gdi_defines.inc at line 83
gdi_defines.inc(85,19) Error: Duplicate identifier "MINCHAR"
gdi_defines.inc(85,19) Hint: Identifier already defined in gdi_defines.inc at line 85
gdi_defines.inc(86,19) Error: Duplicate identifier "MAXCHAR"
gdi_defines.inc(86,19) Hint: Identifier already defined in gdi_defines.inc at line 86
gdi_defines.inc(87,22) Error: Duplicate identifier "MINSHORT"
gdi_defines.inc(87,22) Hint: Identifier already defined in gdi_defines.inc at line 87
gdi_defines.inc(88,22) Error: Duplicate identifier "MAXSHORT"
gdi_defines.inc(88,22) Hint: Identifier already defined in gdi_defines.inc at line 88
gdi_defines.inc(89,25) Error: Duplicate identifier "MINLONG"
gdi_defines.inc(89,25) Hint: Identifier already defined in gdi_defines.inc at line 89
gdi_defines.inc(90,25) Error: Duplicate identifier "MAXLONG"
gdi_defines.inc(90,25) Hint: Identifier already defined in gdi_defines.inc at line 90
gdi_defines.inc(92,20) Error: Duplicate identifier "FILE_BEGIN"
gdi_defines.inc(92,20) Hint: Identifier already defined in gdi_defines.inc at line 92
gdi_defines.inc(93,22) Error: Duplicate identifier "FILE_CURRENT"
gdi_defines.inc(93,22) Hint: Identifier already defined in gdi_defines.inc at line 93
gdi_defines.inc(94,18) Error: Duplicate identifier "FILE_END"
gdi_defines.inc(94,18) Hint: Identifier already defined in gdi_defines.inc at line 94
gdi_defines.inc(96,17) Error: Duplicate identifier "OF_READ"
gdi_defines.inc(96,17) Hint: Identifier already defined in gdi_defines.inc at line 96
gdi_defines.inc(97,22) Error: Duplicate identifier "OF_READWRITE"
gdi_defines.inc(97,22) Hint: Identifier already defined in gdi_defines.inc at line 97
gdi_defines.inc(98,18) Error: Duplicate identifier "OF_WRITE"
gdi_defines.inc(98,18) Hint: Identifier already defined in gdi_defines.inc at line 98
gdi_defines.inc(99,25) Error: Duplicate identifier "OF_SHARE_COMPAT"
gdi_defines.inc(99,25) Hint: Identifier already defined in gdi_defines.inc at line 99
gdi_defines.inc(100,29) Error: Duplicate identifier "OF_SHARE_DENY_NONE"
gdi_defines.inc(100,29) Hint: Identifier already defined in gdi_defines.inc at line 100
gdi_defines.inc(101,29) Error: Duplicate identifier "OF_SHARE_DENY_READ"
gdi_defines.inc(101,29) Hint: Identifier already defined in gdi_defines.inc at line 101
gdi_defines.inc(102,30) Error: Duplicate identifier "OF_SHARE_DENY_WRITE"
gdi_defines.inc(102,30) Hint: Identifier already defined in gdi_defines.inc at line 102
gdi_defines.inc(103,29) Error: Duplicate identifier "OF_SHARE_EXCLUSIVE"
gdi_defines.inc(103,29) Hint: Identifier already defined in gdi_defines.inc at line 103
gdi_defines.inc(104,22) Error: Duplicate identifier "OF_CANCEL"
-
- Beiträge: 6194
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Typ lässt sich nicht redefinieren. Fehler: Doppelter Bez
Warum erkennt der Compiler WINBOOL nicht an, obwohl er den unter Windows einwandfrei anerkennt und ich Programme für Windows ohne dieses Probem übersetzen kann. Warum macht der Compiler bei Übersetzung für andere Plattformen, in meinem Fall Linux, hier Stress? Ein Compiler sollte da egal unter welcher Plattform er arbeitet, keine Unterschiede machen, der soll nicht wissen, wozu ich das brauche.
Hast du irgendwo die Unit Windows eingebunden ?
Aber wahrscheinlich nicht, das du auch für Linux kompiliert hast.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Typ lässt sich nicht redefinieren. Fehler: Doppelter Bez
Ich denke eher an LCLIntf, da ist das ganze qtwinapi nochmals deklariert. Ich würde versuchen, die eigene qtwinapi wegzulassen und stattdessen LclIntf zu verwenden.
-
- Beiträge: 1910
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Typ lässt sich nicht redefinieren. Fehler: Doppelter Bez
compmgmt hat geschrieben:Außerdem frage ich mich, wozu du das überhaupt brauchst, weil WINBOOL = LongBool = LongInt, der nur 0 und 1 benutzt.
Es gibt sehr viele Gründe Longbool zu verwenden, der Offensichtlichste ist natürlich für C Kompatiblität, da die meisten C Bibliotheken einfach Int als Boolean verwenden, aber ich benutze LongBools sehr gerne um zu überprüfen ob ein Wert <> 0 ist, z.B. bei Bitflags
Code: Alles auswählen
function isBitSet(v: Integer; bit: Integer): Longbool;
begin
Result := LongBool(v and (1 shl bit));
end;
Denn neben dem Wahrheitswert den man damit überprüfen kann, verliert man gleichzeitig nicht die Information über welches Bit gesetzt wurde
Code: Alles auswählen
bitNSet := isBitSet(v, 3);
v := v and not Integer(bitNSet); // delete bitflag
if bitNSet then
// dosomething
else
// dosomething else
v := v or Integer(bitNSet); // reset bit
Außerdem kann das auf einigen Architekturen (ich glaube auf ARM prozessoren) in weniger Arbeitsschritten ausgeführt werden im gegensatz zu einem Vergleich wie:
Code: Alles auswählen
function isBitSet(v: Integer; bit: Integer): Boolean;
begin
Result := (v and (1 shl bit)) = (1 shl bit) // oder > 0 oder <> 0, je nach belieben
end;
-
- Beiträge: 351
- Registriert: Mi 25. Nov 2015, 17:06
- OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
- CPU-Target: i386 + x86_64
- Wohnort: in der Nähe von Stuttgart
- Kontaktdaten:
Re: Typ lässt sich nicht redefinieren. Fehler: Doppelter Bez
Ich meinte auch nicht, warum er LongBool benutzt, sondern warum er WINBOOL benutzt. Denn WINBOOL ist ja gleich LongBool. Also kann er auch, statt WINBOOL als LongBool zu deklarieren, direkt LongBool verwendenWarf hat geschrieben:compmgmt hat geschrieben:Außerdem frage ich mich, wozu du das überhaupt brauchst, weil WINBOOL = LongBool = LongInt, der nur 0 und 1 benutzt.
Es gibt sehr viele Gründe Longbool zu verwenden, der Offensichtlichste ist natürlich für C Kompatiblität, da die meisten C Bibliotheken einfach Int als Boolean verwenden, aber ich benutze LongBools sehr gerne um zu überprüfen ob ein Wert <> 0 ist, z.B. bei Bitflags
Wow, drei mal LongBool in einem Satz
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Re: Typ lässt sich nicht redefinieren. Fehler: Doppelter Bez
Danke für den Tipp. In der Lclintf.pas sind zwar die monierten Typen nicht direkt definiert, habe nachgeschaut, aber nun weiß ich in welche Richtung ich suchen muss, um den Compilerfehler einzugrenzen. Eine der Interface Units also, die wohl vom Compiler intern automatisch eingebunden werden, wegen des verwendeten Interfaces. Da müssen die fraglichen Typen unabhängig von den von mir verwendeten Include Dateien nochmals definiert sein. Vielleicht verwende ich ja auch wegen dieses Designs von Lazarus diese Definitionen doppelt. In lcltype.pas sind schon mal einige der monierten Typen schon definiert. Ich schaue weiter.
-
- Beiträge: 1910
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Typ lässt sich nicht redefinieren. Fehler: Doppelter Bez
compmgmt hat geschrieben:Ich meinte auch nicht, warum er LongBool benutzt, sondern warum er WINBOOL benutzt. Denn WINBOOL ist ja gleich LongBool. Also kann er auch, statt WINBOOL als LongBool zu deklarieren, direkt LongBool verwendenWarf hat geschrieben:Es gibt sehr viele Gründe Longbool zu verwenden, der Offensichtlichste ist natürlich für C Kompatiblität, da die meisten C Bibliotheken einfach Int als Boolean verwenden, aber ich benutze LongBools sehr gerne um zu überprüfen ob ein Wert <> 0 ist, z.B. bei Bitflags
Wow, drei mal LongBool in einem Satz
Das finde ich auch so toll in der Windows API, die haben irgendwie für jeden Typen gefühlte 50 verschiedene Bezeichner eingeführt, das das erste ist was ich mache wenn ich WinAPI Code habe, mit Strg+Click rausfinden was denn jetzt was ist
-
- Beiträge: 351
- Registriert: Mi 25. Nov 2015, 17:06
- OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
- CPU-Target: i386 + x86_64
- Wohnort: in der Nähe von Stuttgart
- Kontaktdaten:
Re: Typ lässt sich nicht redefinieren. Fehler: Doppelter Bez
Das ist aber nicht nur in der Windows API so, auch Lazarus selbst macht das leider. Schau dir z.B. mal LongWord an. DWord = Cardinal = LongWord. Das ergibt genau so wenig Sinn.Warf hat geschrieben:compmgmt hat geschrieben:Ich meinte auch nicht, warum er LongBool benutzt, sondern warum er WINBOOL benutzt. Denn WINBOOL ist ja gleich LongBool. Also kann er auch, statt WINBOOL als LongBool zu deklarieren, direkt LongBool verwendenWarf hat geschrieben:Es gibt sehr viele Gründe Longbool zu verwenden, der Offensichtlichste ist natürlich für C Kompatiblität, da die meisten C Bibliotheken einfach Int als Boolean verwenden, aber ich benutze LongBools sehr gerne um zu überprüfen ob ein Wert <> 0 ist, z.B. bei Bitflags
Wow, drei mal LongBool in einem Satz
Das finde ich auch so toll in der Windows API, die haben irgendwie für jeden Typen gefühlte 50 verschiedene Bezeichner eingeführt, das das erste ist was ich mache wenn ich WinAPI Code habe, mit Strg+Click rausfinden was denn jetzt was ist
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);