Wiedereinmal Stress mit Headern

CodeFatal

Erfahrenes Mitglied
Hi,
ich mal wieder mit null durchblick.

ich hab mir ein mfc basiertes Programm erstellt, in dem jediglich ein jpg angezeigt werden soll.

zum Testen hab ich in der cpp zwei dafür benötigte Header includiert, zwei nötige globale Variablen erstellt und die in der richtigen Reihenfolge mit leben gefüllt und angezeigt: Ergebnis ein Jpg auf dem Schirm:-) Hey toll. aber globale Variablen sind ja nicht schön. also die Variablen in die dlgclasse gepackt: Ergebnis: Linker beschwert sich, ist auch gut so, kennt die Typen ja auch nicht. :-) Also die wichtigen Header auch in den Classen header gepackt: Ergebnis:
Code:
neuproDlg.obj : error LNK2005: ENCODER_SAVE_FLAG already defined in neupro.obj
und davon dann 71 Stück.:-) Mal erlich will mich mein Compiler veräppeln oder gibt es Header die absolut nicht in anderen Headern includiert werden dürfen :confused: Da diese JPG funktinalität in nem anderen Projekt auf unterster Ebene Anwendung finden soll, muss ich ne Lösung finden.

in der Beschreibung der Header hab ich nix verwerfliches gefunden und alle anderen elektronischen Quellen schweigen sich aus...

Hilfe!

Gruss Michael
 
Hi,
binde doch die Header-Datei, die du in der Implementierungsdatei (cpp) benötigst nicht in deren Header sondern direkt in die cpp ein.
Wichtig kann auch die Reihenfolge der Einbindung sein.

Ansonsten, häng doch mal den Code ran!
 
die reihenfolge ist schon so die einzig richtige.
und in der cpp kann ich die header nicht einbinden, da mir dann ja die elemente in der Klassendefinition verloren gehen.

Gedacht ist folgendes:

ich bau mir eine Klasse die ne grundlegende Tätigkeit macht.

Diese Klasse wird in anderen Klassen eingebaut und verwendet.

Und dazu brauch ich doch die Header... wenn das nur an einer Stelle wär hät ich ja kein Problem.

Michael
 
Hi.

Das klingt für mich so als hättest du es versäumt die Header gegen mehrfaches Einbinden zu schützen.
Code:
#ifndef MEIN_HEADER
#define MEIN_HEADER
... /* code */
#endif /* MEIN_HEADER

Wenn es nicht daran liegt, solltest du wirklich mal etwas mehr Code (ein Beispiel wäre schön) posten damit man eher nachvollziehen kann was du meinst.

Gruß
 
Moin moin,
Neuer Tag, neues Glück, alte Probleme.

Also die Header sind nicht von mir sondern von den schlauen Microsoftlern.
Es gab da zwar nen paar Header die nicht geschützt waren, aber auch nachträgliches ändern hat nix geholfen :-( Ich hab die verwendeten Header mal in den Anhang gepackt.

in meinem Header wird folgendes aufgerufen
Code:
#include <INITGUID.h> 
#include <imaging.h>
Die Reihenfolge der Header ist hierbei wichtig.

Kann es Vielleicht sein, das in der zugehörigen image.lib die Teile nicht geschützt sind :confused: Wenn ja wie krieg ich die geändert.

Gruss Michael
 

Anhänge

Hi,
ich kann das Problem zwar nicht komplett nachvollziehen aber ich würde davon ausgehen, dass die Microsoft Header ok sind, denn du wirst nicht der Erste sein, der die benutzt. Ich weiß, das hilft dir jetzt nicht unbedingt weiter aber vielleicht solltest du dir deinen Code nochmal genau unter die Lupe nehmen.

Fehler mit Headern entstehen meist durch einen falsche Reihenfolge der Einbindung oder durch doppeltes Einbinden.
 
Die Header werden/sollen später an mehreren Stellen eingebunden werden, um zugriff auf die elemente zu bekommen. daher schützt man doch die Header oder seh ich das falsch?
 
Hi.

Also es sieht so aus, das die initguid.h Header-Datei nur in einer einzigen CPP Datei eines Projekts inkludiert werden darf. Siehe die Frage How does the DEFINE_GUID macro work?.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directshow/htm/directshowfaq.asp hat gesagt.:
If you do not include Initguid.h in any of the source files, you will get a link error "unresolved external symbol." If you include Initguid.h twice for the same GUID, you will get a compile error "redefinition; multiple initialization." To resolve these errors, make sure that Initguid.h is included exactly once. Also, do not include Initguid.h inside a precompiled header file, because in effect the precompiled header is included in every source file.


Gruß
 
Na toll... aber danke für die Hilfe... nett das die Klamotten von Microsoft mal so tun wie in den MSDN's beschrieben... Muss das ganze dann wohl mal umgehen... oder kann man das ganze irgendwie in ne dll oder ähnliches packen, damit man die verwendeten klassen mehrfach in verschiedenen Dateien nutzen kann?

Gruss Michael
 
Zurück