Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

hanhau

Treue Seele

  • »hanhau« ist der Autor dieses Themas

Beiträge: 80

Wohnort: St. Pölten, Österreich

Beruf: schueler

  • Private Nachricht senden

1

25.02.2015, 14:48

Zeiger kopieren

Willkommen bei meinen Problem :)

Zu dem Problem:
Ich benutze SFML und C++ und möchte einen Zeiger auf ein sf::RenderWindow in einer Headerdatei erstellen,
damit ich nicht bei jeder Funktion das Fenster als Parameter übergeben muss.
Dafür müsste man am Anfang des Codes nur eine Funktion aufrufen, die diesen "globalen" Zeiger
auf das Fenter, das in der Funktion als Parameter übergegeben wird, zeigen lässt.

Sprich der Zeiger in der Header-Datei:

C-/C++-Quelltext

1
sf::RenderWindow *HW_Ptr;


die Funktion in der Header-Datei:

C-/C++-Quelltext

1
2
3
4
void setHandleWindow(sf::RenderWindow *HW)
{
         // Wie lasse ich jetzt den HW_Ptr aus das HW vom Parameter zeigen ?
}


Ich hoffe, jemand kann mir helfen,
da ich wirklich noch Probleme mit Zeigern habe :)

Danke im voraus,
Hannes :thumbup:
Oft denke ich an sie, niemals habe ich sie gefragt, niemals etwas gesagt,
nur verzweifelt am PC gesessen und dabei die Zeit vergessen, sie ist weg.

ExCluSiv3

Frischling

Beiträge: 61

Wohnort: Düsseldorf

Beruf: Fachinformatiker - Ausbildung

  • Private Nachricht senden

2

25.02.2015, 14:55

http://www.cplusplus.com/doc/tutorial/pointers/

C-/C++-Quelltext

1
HW_ptr = HW;

hanhau

Treue Seele

  • »hanhau« ist der Autor dieses Themas

Beiträge: 80

Wohnort: St. Pölten, Österreich

Beruf: schueler

  • Private Nachricht senden

3

25.02.2015, 14:59

Danke !

Allerdings kommt jetzt die Meldung beim Kompilieren:
"undefined reference to HW_Ptr"
Oft denke ich an sie, niemals habe ich sie gefragt, niemals etwas gesagt,
nur verzweifelt am PC gesessen und dabei die Zeit vergessen, sie ist weg.

ExCluSiv3

Frischling

Beiträge: 61

Wohnort: Düsseldorf

Beruf: Fachinformatiker - Ausbildung

  • Private Nachricht senden

4

25.02.2015, 15:28

Dann solltest du deinen Code posten, ohne den wirds Wahrsagerei dir zu sagen woran es genau liegt.

hanhau

Treue Seele

  • »hanhau« ist der Autor dieses Themas

Beiträge: 80

Wohnort: St. Pölten, Österreich

Beruf: schueler

  • Private Nachricht senden

5

25.02.2015, 15:33

main.cpp

C-/C++-Quelltext

1
2
sf::RenderWindow FENSTER(sf::VideoMode(x,x),"Test",sf::Style::Default);
setHandleWindow(FENSTER);


GUI.hpp

C-/C++-Quelltext

1
2
3
extern sf::RenderWindow *HW_Ptr;

void setHandleWindow(sf::RenderWindow *HW);


GUI.cpp

C-/C++-Quelltext

1
2
3
4
void setHandleWindow(sf::RenderWindow *HW)
{
      HW_Ptr = HW;
}
Oft denke ich an sie, niemals habe ich sie gefragt, niemals etwas gesagt,
nur verzweifelt am PC gesessen und dabei die Zeit vergessen, sie ist weg.

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

6

25.02.2015, 15:35

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// bla.hpp
#pragma once

extern int* int_ptr;

void foo(int* i);

// bla.cpp
#include "bla.hpp" // <- ?

int* int_ptr;

void foo(int* i){
    int_ptr = i;
}

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DeKugelschieber« (25.02.2015, 15:43)


hanhau

Treue Seele

  • »hanhau« ist der Autor dieses Themas

Beiträge: 80

Wohnort: St. Pölten, Österreich

Beruf: schueler

  • Private Nachricht senden

7

25.02.2015, 15:40

Headerdatei ist "included".
Sonst würde der Rest auch nicht kompilieren :)
Oft denke ich an sie, niemals habe ich sie gefragt, niemals etwas gesagt,
nur verzweifelt am PC gesessen und dabei die Zeit vergessen, sie ist weg.

8

25.02.2015, 15:41

Das Problem ist das extern. Damit sagst du dem Compiler, dass sich die Variable in irgendeiner Übersetzungseinheit befindet, der Linker kann sie dann allerdings nicht finden. Du musst also in einer cpp-Datei die Variable definieren. Da du allerdings nur innerhalb der GUI.cpp darauf zugreifen willst, ist die Deklaration im Header unnötig.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

hanhau

Treue Seele

  • »hanhau« ist der Autor dieses Themas

Beiträge: 80

Wohnort: St. Pölten, Österreich

Beruf: schueler

  • Private Nachricht senden

9

25.02.2015, 15:45

Danke :)

Ja, das klingt selbst für mich sehr logisch :)
Danke für Erklärung ^^

Funktioniert nun tadellos, nochmals herzlichen Dank !
Oft denke ich an sie, niemals habe ich sie gefragt, niemals etwas gesagt,
nur verzweifelt am PC gesessen und dabei die Zeit vergessen, sie ist weg.

Werbeanzeige