• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

C++ Header Dateien

Hallo,
ich versuche von C auf C++ umzusteigen. Das C-Programm läuft einwandfrei. Wenn ich das Programm unter C++ übersetze (mit Änderungen), sagt der Compiler, dass alle Variablen, die in der Header-Datei, die in beiden CPP-Dateien ist, mehrfach definiert sind. Wenn ich aus einer Quelldatei die Header-Datei entferne, findet er die benötigten Variablen nicht.
Ich nehme an, dass ich etwas falsch mache. Aber was?

Danke Heinz
 
Hi,

ich versuche von C auf C++ umzusteigen.
Hm, find ich persönlich etwas schade. Was vermißt Du denn konkret in C ? Wolltest Du unbedingt OOP oder war es etwas Anderes ?
Ich nehme an, dass ich etwas falsch mache. Aber was?
Ich weiß es leider nicht direkt.
Aber C ist ziemlich eigen. Wenn Du's nicht schon getan hast, kompilier doch mal Dein C-Programm mit
Code:
gcc -pedantic -Wall
Vielleicht kriegst Du dann noch eine Fehlermeldung.
Vielleicht kannst / mußt Du Deine Variablen auch "extern" erklären.

Viele Grüße
 
Hallo,
vielen Dank für Deine Anwort. Ich werde es probieren.
Der Grund für den Wechsel isr tatsächlich, dass ich es mit OOP versuchen will.
Gruß
Heinz
 
Hallo,

Wenn Dein header file mehrfach included wird (z.B. über verschiedene Pfade/files), führt es dazu, daß darin definierte Variablen auch mehrfach definiert werden, was zu comile/link Problemen führt.

Beispiel bsp.h:
Code:
#ifndef BSP_H
#define BSP_H
int a;
#endif

Besser ist es Variablen in .cpp file zu definieren und im header über extern zu deklarieren:
(Nicht unbedingt ein schöner Stil, aber funktioniert)
bsp.h:
Code:
#ifndef BSP_H
#define BSP_H
extern int a;
#endif

bsp.C:
Code:
int a;

Ansonsten poste mal dein Header file.
 
Der Grund für den Wechsel ist tatsächlich, dass ich es mit OOP versuchen will.
Aha. Zum Lernen ist da übrigens Python als Zwischenschritt recht gut, siehe z.B. folgenden Code, der sich praktisch selbst erklärt:
Code:
#!/usr/bin/env python

class Lamp:

    def __init__(self):
        self.status = "off"

    def switchOn(self):
        print "Click. Light."
        self.status = "on"

    def switchOff(self):
        print "Click. Darkness."
        self.status = "off"

    def printStatus(self):
        print "The lamp is " + self.status + " now."

mylamp = Lamp()

mylamp.printStatus()

mylamp.switchOn()

mylamp.printStatus()

mylamp.switchOff()

mylamp.printStatus()

Verzeihung für OffTopic, aber könnte ja ganz hilfreich sein ...

Viele Grüße
 
Hallo,
ich danke für die Tipps und bin am ausprobieren. Die Situation ist dei folgende: Ich habe zwei Dateien scan.cpp und helper.cpp. In beide Dateien ist eine Datei scan.h inkludiert. Bei C war das kein Problem, bei C++ bekomme ich die multiple definition.
Ich werde die Lösung mit extern testen. Mich interessiert halt auch warum das bei C funktioniert und bei C++ nicht.
Grüße
Heinz
 
Ich danke für die guten Tipps. Ich habe das Programm auf die extern-Variante umgestellt und es funktioniert astrein.

Noch einmal danke.
Heinz
 
Oben