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

cereus

Frischling

  • »cereus« ist der Autor dieses Themas

Beiträge: 45

Wohnort: Ufg

  • Private Nachricht senden

1

02.08.2009, 15:30

Probleme beim include der Header von Klassen

Hallo

Ich hab ein Windowsprogram geschrieben, also mit einem WinMain Hauptprogramm.

Dazu kommen nun mehrer Klassen:

- CHaupt: Soll alle anderen Klassen in sich vereinigen. Ein Objekt von CHaupt wird in
WinMain verwendet. Die Klasse enthält Objekte der Klassen CEingabe, CAusgabe und
CNews.

- CPart: Diese Klasse enthält Objekte der Klassen CEingabe und CAusgabe.

- CNews: Diese Klasse ist von CPart abgeleitet

- CEingabe + CAusgabe : Mehrere Memberfunktionen und Variablen.

Mein Problem:
Wo muss ich jetzt welche Headerdatei mit #include einfügen?

Ich hätte schon einmal eine Lösung für dieses Problem, indem ich rein logisch CEingabe
und CAusgabe in CPart und CPart in CNews eingefügt habe. CNews dann wiederum in
CHaupt.

Da hat alles funktioniert, doch dann wollte ich eine neue Klasse CTermine erstellen, die von CPart abgeleitet ist. wenn ich diese nun bei CHaupt include kriege ich die
Fehlermeldung, dass CEingabe und CAusgabe entweder nicht oder mehrfach deklariert sind.

Was kann ich da machen? Danke schon mal.
--- ---

Nexxtron

Alter Hase

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

2

02.08.2009, 15:59

mit include guards:

Zitat

# ifndef "Name von datei"
# define "Name von datei"
// includes zeug
// Quellcode der Headerdatei
#endif
New Project: Operation CityRacer

3

02.08.2009, 16:01

Include guards vergessen?

EDIT: Da war wohl jemand schneller ...

killmichnich

unregistriert

4

02.08.2009, 16:09

ähm mal so ne kleine zwischenfrage: Ich hab das ganze jetzt mit '#pragma once' gemacht, funktioniert auch, aber was is dazu der Unterschied, bzw. kann das inen Einfluss auf mein Programm haben?

cereus

Frischling

  • »cereus« ist der Autor dieses Themas

Beiträge: 45

Wohnort: Ufg

  • Private Nachricht senden

5

02.08.2009, 16:09

Danke für die schnellen Antworten.

Mit Include Gards hab ich noch nie gearbeitet.
Ich hab das jetzt einfach mal probiert, aber er gibt mir folgende Fehlermeldung aus:

fatal error C1016: #if[n]def erfordert einen Bezeichner
--- ---

6

02.08.2009, 16:20

@cereus: Hast du das direkt von oben übernommen wie's is?

geb dem #ifndef einfach dann den bezeichner deiner header-datei, z.B:

C-/C++-Quelltext

1
2
3
4
#ifndef cpart_h__
#define cpart_h__
// bla bla bla

#endif // cpart_h__


@killmichnich: "#pragma once" funktioniert meines Wissens nach nur unter Windows, wird bei anderen einfach übersprungen.
Ein Vorteil davon wäre z.B. das es die Compilierzeit verkürzt.

cereus

Frischling

  • »cereus« ist der Autor dieses Themas

Beiträge: 45

Wohnort: Ufg

  • Private Nachricht senden

7

02.08.2009, 16:26

ah okay jetzt funktionierts. Danke.

So am Rand: Vielleicht kann mir auch jemand noch erklären was genau da jetzt passiert. Ich würde das schon gern wissen, damit ichs wann anders nicht auch falsch mache.
Danke
--- ---

Nexxtron

Alter Hase

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

8

02.08.2009, 16:34

so wie es dein Fehler im ersten post von dir gesagt hat...verhindert die mehrfach deklaration, also wenn du es 2 mal included hast...
New Project: Operation CityRacer

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

9

03.08.2009, 10:56

Zitat

@killmichnich: "#pragma once" funktioniert meines Wissens nach nur unter Windows, wird bei anderen einfach übersprungen.
Ein Vorteil davon wäre z.B. das es die Compilierzeit verkürzt.


Nicht ganz, es geht mit Visual Studio, aber wohl auch mit GCC. Zum weiterlesen

Zitat von »"Wikipedia"«

You can use both #pragma once and include guards to write portable code that can also take advantage of #pragma once optimizations the compiler may support #pragma once

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
#pragma once
#ifndef GRANDFATHER_H
#define GRANDFATHER_H
 
struct foo {
    int member;
};
 
#endif /* GRANDFATHER_H */



Wann sollte man #ifndef, #endif und #pragma once verwenden?

Werbeanzeige