redeklination verhindern



  • Hi,
    ich habe mein Projekt in verschiedene Dateien aufgeteilt. Dabei habe ich pro Klasse eine header und eine cpp-Datei. Wenn ich jetzt in die Datei mit der WinMain einfach alle header und cpp-Dateien einbinde, gibt es einen Fehler, den ich drauf zurückführe, dass einige Dateien mehrmals eingebunden werden. Ich habe in jeder cpp-Datei einen include für den header. Was muss ich jetzt in die main-Datei includen? bzw. gibt es eine Möglichkeit, dem Compiler mitzuteilen, dass er die zweite Definition einer Klasse einfach ignorieren soll?

    Einfach in den cpp-Dateien die includes für die header wergzulassen, habe ich schon probiert.

    danke schonmal...



  • Includewächter hast du aber schon eingebaut, oder? 😕

    Die findest du in jeder vom Assistenten erstellten Klasse:

    #if !defined(AFX_FILIALENSET_H__D2D4B166_8441_48C3_9C7B_CA821DCCB731__INCLUDED_)
    #define AFX_FILIALENSET_H__D2D4B166_8441_48C3_9C7B_CA821DCCB731__INCLUDED_
    
    //Hier kommt der eigentliche Inhalt der Headerdatei
    
    #endif // AFX_FILIALENSET_H__D2D4B166_8441_48C3_9C7B_CA821DCCB731__INCLUDED_
    

    Die Namen müssen aber eindeutig sein, sonst funktioniert es nicht. ⚠



  • Man inkludiert keine CPP-Dateien.



  • estartu_de schrieb:

    Includewächter hast du aber schon eingebaut, oder? 😕

    Die findest du in jeder vom Assistenten erstellten Klasse:

    #if !defined(AFX_FILIALENSET_H__D2D4B166_8441_48C3_9C7B_CA821DCCB731__INCLUDED_)
    #define AFX_FILIALENSET_H__D2D4B166_8441_48C3_9C7B_CA821DCCB731__INCLUDED_
    
    //Hier kommt der eigentliche Inhalt der Headerdatei
    
    #endif // AFX_FILIALENSET_H__D2D4B166_8441_48C3_9C7B_CA821DCCB731__INCLUDED_
    

    Die Namen müssen aber eindeutig sein, sonst funktioniert es nicht. ⚠

    Nein, die hatte ich nicht (ich hasse es, wenn IDEs irgendwas in meine Dateien schreiben und hab deshalb den Assistenten nicht verwendet). Müssen die irgendwie an den Namen der Klasse/Datei angepasst werden? Damit gehts nämlich auch nicht



  • a.h

    #ifndef DATEIA_H
    #define DATEIA_H
    
    /* dein CODE */
    #endif
    

    b.h

    #ifndef DATEIA_H
    #define DATEIA_H
    
    /* dein CODE */
    #endif
    

    a.cpp

    #include "a.h"
    

    b.cpp

    #include "b.h"
    

    main.cpp

    #include "a.h"
    #include "b.h"
    
    int main(){
      return 0;
    }
    


  • estartu_de schrieb:

    Die Namen müssen aber eindeutig sein, sonst funktioniert es nicht. ⚠

    Ja, das musst du anpassen. Nimm z.B. den Dateinamen oder so.

    In VC7 wurde das Selbe mit

    #pragma once
    

    ganz oben im Header erreicht. Vielleicht geht das ja. 🙂

    Der Ansatz, alles selber machen zu wollen ist ja gut - aber manchmal sollte man gucken, was der (verhasste) Automatismus macht, um ihn dann an die eigenen Wünsche anzupassen.
    Ich nutze den Assistenten gerne und passe dann aber an meine Vorstellungen an. Das geht schneller als wenn ich an alles selber denken muss.



  • estartu_de schrieb:

    Der Ansatz, alles selber machen zu wollen ist ja gut - aber manchmal sollte man gucken, was der (verhasste) Automatismus macht, um ihn dann an die eigenen Wünsche anzupassen.
    Ich nutze den Assistenten gerne und passe dann aber an meine Vorstellungen an. Das geht schneller als wenn ich an alles selber denken muss.

    Ich denk mal dran...

    Aber jetzt gehts...ich hatte dann noch eine Klasse, die genauso hie0ß, wie eine aus windows.h, aber nach umbenennung gehts jetzt 🕶

    Danke...


Anmelden zum Antworten