 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 23.12.2011, 12:27 Titel: "undefined reference" Problem mit zusammenhängende |
|
|
Hey, habe ein Problem. Ich bekomme folgenden Fehler beim Kompilieren:
Zitat: | X.o: In function `LOADMAP':
(.text+0x2712): undefined reference to `MAP' |
Wenn ich die markierte Zeile im folgenden Code lösche ist der Fehler weg:
Code: | Type TWare
As String nam
As Integer id
As Integer weiht
As Any Ptr imgptr
As String info
End Type
Dim Shared As TWare WareT(500)
Type TFracht
As TWare ware 'DIESE ZEILE <--------- <---------
As Integer anzahl
As Integer realweight
End Type |
Dummerweise brauche ich diese Zeile dringend. Hier nochmal der Code der Funktion "LoadMap()", wo der Fehler laut der Fehlermeldung liegen müsste:
Code: | Sub LoadMap(file As String)
Dim As String black
Var mapf=Freefile
If Command()="-debug" Then Print #debugf,""
If Command()="-debug" Then Print #debugf,"LOAD MAP:"
Map(1).path=file
If Command()="-debug" Then Print #debugf,"Lade /data/maps/"+file
Open "data/maps/"+file For Input As #mapf
Input #mapf,Map(1).anzsectors
If Command()="-debug" Then Print #debugf,"Anzahl Sektoren: "+Str(Map(1).anzsectors)
For i As Integer=1 To Map(1).anzsectors
AmbientLight 8,18,32
Line Input #mapf,black
Map(1).Sectors(i).id=i
Line Input #mapf,Map(1).Sectors(i).nam
Line Input #mapf,Map(1).Sectors(i).skyp
Chdir("data/gfx/skybox/"+Map(1).Sectors(i).skyp+"/")
For i2 As Integer=1 To 6
Map(1).sectors(i).sky(i2)=Createcube()
ScaleEntity Map(1).sectors(i).sky(i2),88000,88000,88000
EntityFx Map(1).sectors(i).sky(i2),1
Map(1).sectors(i).skyt(i2)=LoadTexture(Str(i2)+".bmp")
EntityTexture Map(1).sectors(i).sky(i2),Map(1).sectors(i).skyt(i2)
Next
Chdir("../../../..")
Input #mapf,Map(1).Sectors(i).anzplanets
Input #mapf,Map(1).Sectors(i).anzships
Input #mapf,Map(1).Sectors(i).anzstations
Input #mapf,Map(1).Sectors(i).anzasteroids
Input #mapf,Map(1).Sectors(i).anznebulas
For i2 As Integer=1 To Map(1).Sectors(i).anzasteroids
With Map(1).Sectors(i).Asteroid(i2)
Line Input #mapf,black
Line Input #mapf,.objp
Line Input #mapf,.num
Input #mapf,.x,.y,.z,.sx,.sy,.sz
Chdir ("data/gfx/")
.objptr=LoadMesh(.objp)
Chdir ("../..")
ScaleEntity .objptr,.sx,.sy,.sz
PositionEntity .objptr,.x,.y,.z
EntityTexture .objptr,AsteroidTex
EntityType .objptr,2
EntityPickMode .objptr,2
End With
Next
For i2 As Integer=1 To Map(1).Sectors(i).anznebulas
With Map(1).Sectors(i).Nebula(i2)
Line Input #mapf,black
Input #mapf,.id
Input #mapf,.x,.y,.z
For i3 As Integer=1 To 10
PositionEntity NebulaT(.id).typ1r(i3),.x+NebulaT(.id).typ1rx(i3),.y+NebulaT(.id).typ1ry(i3),.z+NebulaT(.id).typ1rz(i3)
Next
For i3 As Integer=1 To 10
PositionEntity NebulaT(.id).typ2r(i3),.x+NebulaT(.id).typ2rx(i3),.y+NebulaT(.id).typ2ry(i3),.z+NebulaT(.id).typ2rz(i3)
Next
For i3 As Integer=1 To 10
PositionEntity NebulaT(.id).typ3r(i3),.x+NebulaT(.id).typ3rx(i3),.y+NebulaT(.id).typ3ry(i3),.z+NebulaT(.id).typ3rz(i3)
Next
'PositionEntity NebulaT(1).typ1,100,100,100
End With
Next
For i2 As Integer=1 To Map(1).Sectors(i).anzplanets
With Map(1).Sectors(i).Planet(i2)
.id=i2
Line Input #mapf,black
Line Input #mapf,.nam
Input #mapf,.tp
Input #mapf,.ab,.ap
Input #mapf,.sx,.sy,.sz
Input #mapf,.x,.y,.z
Chdir("data/gfx/planets/")
.t=LoadTexture(.tp)
ScaleTexture .t,0.5,0.5
If .ab=1 Then .a=LoadTexture(.ap)
Chdir("../../..")
.obj=CreateSphere(90)
ScaleEntity .obj,.sx,.sy,.sz
PositionEntity .obj,.x,.y,.z
EntityTexture .obj,.t
'EntityPickMode .obj,2
If .ab=1 Then .aobj=CreateSphere(90,.obj)
If .ab=1 Then EntityAlpha .aobj,0.49
If .ab=1 Then ScaleEntity .aobj,1.01,1.01,1.01
If .ab=1 Then EntityTexture .aobj,.a
End With
Next
If Command()="-debug" Then Print #debugf,"Sektor("+Str(i)+") "+Map(1).Sectors(i).nam+" wurde geladen"
If Command()="-debug" Then Print #debugf,"Anzahl Objekte: "+Str(Map(1).Sectors(i).anzships+Map(1).Sectors(i).anzstations+Map(1).Sectors(i).anzplanets)
Next
End Sub |
Weiß jemand spontanerweise, wie ich den Fehler beheben könnte, ohne auf das "As TWare ware" im Type zu verzichten?
Danke für mögliche Hilfe  |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 23.12.2011, 12:39 Titel: |
|
|
ist das MAP array ne shared variable? _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 23.12.2011, 12:51 Titel: |
|
|
Ja
Code: | Type Map
As String path
As Integer anzsectors
As Sector sectors(500)
End Type
Dim Shared As Map Map(1) |
|
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 23.12.2011, 14:02 Titel: |
|
|
mal auf die idee gekommen, die variable anders zu nennen als ihren typ? _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 23.12.2011, 14:13 Titel: |
|
|
Schon probiert, das Problem bleibt. |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 23.12.2011, 14:37 Titel: |
|
|
kA, ich würd sagen versuch die SHARED variablen loszuwerden und reich sie ordentlich über parameter durch. bessere idee hab ich jetzt nicht. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4700 Wohnort: ~/
|
Verfasst am: 23.12.2011, 18:52 Titel: |
|
|
SHARED macht z. B. im Zusammenhang mit CONSTRUCTORs Probleme, wegen der Deklarations-Reihenfolge. Das ist jetzt aber rein geraten. Ansonsten könntest du vielleicht mal in der SUB LoadMap stückchenweise Code auskommentieren um zu sehen, wo genau der Fehler auftritt. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 23.12.2011, 23:51 Titel: |
|
|
Wenn ich die ganze Funktion auskommentiere kommt tausendmal der Fehler bei anderen Funktionen die ich nutze. Aber sobald ich, wie oben bereits gesagt, diese eine Zeile in dem Type lösche, funktioniert alles wieder.  |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4700 Wohnort: ~/
|
Verfasst am: 24.12.2011, 00:04 Titel: |
|
|
Du sollst ja nicht die ganze Funktion auskommentieren, sondern nur einen Teil - so lange bist du weißt, welche(r) Befehl(e) den Fehler produzieren. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 24.12.2011, 00:28 Titel: |
|
|
Macht das denn Sinn, wenn der Fehler immernoch da ist, wenn es die Funktion nicht mal gibt(sie komplett auskommentiert ist) ? |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4700 Wohnort: ~/
|
Verfasst am: 24.12.2011, 00:34 Titel: |
|
|
Der Fehler kann nur dann in besagter Funktion auftreten, wenn er darin auch verhanden ist. Unabhängig davon kann er natürlich auch in anderen Funktionen auftreten. Aber sobald er nicht mehr in der oben zitierten Funktion auftritt, weißt du, dass ein auskommentierter Teil dafür (mit)verantwortlich ist. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 24.12.2011, 00:50 Titel: |
|
|
Ich habe das Problem auf andere Weise gelöst:
Code: | Type TWare
As String nam
As Integer id
As Integer weight
As Any Ptr imgptr
As String info
End Type
Dim Shared As TWare WareT(500)
Type TFracht
As Integer wareid
As Integer anzahl
As Integer realweight
End Type |
Es wird nicht mehr "As TFracht ware", sondern "As Integer wareid" benutzt, wareid ist dann die jeweilige Indexnummer, mit der auf ein Element in dem Array "WareT" zugreifen kann.  |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 24.12.2011, 16:07 Titel: |
|
|
Das ist weniger eine Lösung, sondern mehr ein Hack
Ich würde hier ja einfach auf nen Compilerbug tippen, da von dem was ich sehe der Typ TFracht/TWare keinen direkten Bezug zu LoadMap hat... |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 24.12.2011, 16:44 Titel: |
|
|
Auf jeden Fall funktioniert es jetzt.  |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|