Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

"undefined reference" Problem mit zusammenhängende

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 23.12.2011, 12:27    Titel: "undefined reference" Problem mit zusammenhängende Antworten mit Zitat

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 lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 23.12.2011, 12:39    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 23.12.2011, 12:51    Titel: Antworten mit Zitat

Ja
Code:
Type Map
   As String path
   As Integer anzsectors
   As Sector sectors(500)
End Type

Dim Shared As Map Map(1)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 23.12.2011, 14:02    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 23.12.2011, 14:13    Titel: Antworten mit Zitat

Schon probiert, das Problem bleibt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 23.12.2011, 14:37    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4700
Wohnort: ~/

BeitragVerfasst am: 23.12.2011, 18:52    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 23.12.2011, 23:51    Titel: Antworten mit Zitat

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. verwundert
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4700
Wohnort: ~/

BeitragVerfasst am: 24.12.2011, 00:04    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 24.12.2011, 00:28    Titel: Antworten mit Zitat

Macht das denn Sinn, wenn der Fehler immernoch da ist, wenn es die Funktion nicht mal gibt(sie komplett auskommentiert ist) ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4700
Wohnort: ~/

BeitragVerfasst am: 24.12.2011, 00:34    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 24.12.2011, 00:50    Titel: Antworten mit Zitat

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. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 24.12.2011, 16:07    Titel: Antworten mit Zitat

Das ist weniger eine Lösung, sondern mehr ein Hack zwinkern
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
Benutzer-Profile anzeigen Private Nachricht senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 24.12.2011, 16:44    Titel: Antworten mit Zitat

Auf jeden Fall funktioniert es jetzt. lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz