include ??



  • hi,
    hab eine datei (datum.hpp) in der meine klasse steht.
    eine datei(datum1.cpp) in der die konstruktoren , sowie verscheidene methoden für die klasse stehen ...
    und dann noch ein Hauptprogramm .. jetzt meine frage , wie bring ich das so zusammmen das es funktioniert ??
    in meinem hp steht :
    include "Datum.hpp" nur wo schreib ich rein das die konstruktoren in der datum1.cpp stehen ??
    danke
    chris



  • Du musst dir das so vorstellen, dass an die gesamte Headerdatei "ausgeschnitten" wird und dann an der Stelle des #include gepasted wird.

    Es ist also für den Compiler nur eine einzelne Datei.

    Den Konstructor hast du doch in der Header trotz alledem deklariert, oder?

    Also so hier:

    Header:

    class Klasse
    {
      public:
      Klasse(); 
    };
    

    CPP_Datei:

    #include "Datum.h"
    Klasse::Klasse()
    {
      //tu was
    }
    


  • ja, so hab ichs gemacht,
    nur ... kann ich noch eine dritte *.cpp datei schreiben in die mein hp kommt ??
    chris



  • Ja.



  • hi, wie ??
    also hab

    datum.hpp

    class Datum
    {  
       unsigned int tag,monat,jahr;
       unsigned int tag_im_jahr;
       unsigned int wochentag;
       ..
       ..
    public:
       Datum(int t=1,int m=1,int j=1980);
       ..
       ..
    };
    

    dann hab ich
    datum1.cpp

    #include <iostream.h>
    #include <string.h>
    #include <stdlib.h>
    #include "texte.hpp"
    #include "Datum.hpp"
    
    const char* Datum::text_wochentag()
    {  return Name_Tag[wochentag];   }
    
    void pruefen(int *t,int *m,int *j)
    {
       schaltjahr ?? //
    
    Datum::Datum(int t/*=1*/,int m/*=1*/,int j/*=1980*/)
    {  tag=t;
       monat=m;
       jahr=j;
       bestimmen_Tag_im_Jahr();
       bestimmen_Wochentag();
       letzter_tag=0; // vorlaeufig
    }
    
    void Datum::drucken_Kalender()
    {  int TagAlt=tag;
       tag=1;
       bestimmen_Tag_im_Jahr();
       bestimmen_Wochentag();
       cout << "      " <<  Name_Monat[monat-1] << "  " << jahr << "\n ";
       cout << "  So Mo Di Mi Do Fr Sa\n  ";
       for (int i=0;i<wochentag;i++)
          cout << "   ";
       for (i=1;i<=letzter_tag;i++)
       {  if (i<10)  cout << "  " << i;
          else       cout << " "  << i;
          if ((i+wochentag)%7==0) cout << "\n  ";
       }
       tag=TagAlt;
       bestimmen_Tag_im_Jahr();
       bestimmen_Wochentag();
    }
    
    unsigned int Datum::ist_schaltjahr()
    {  return ((jahr % 4 == 0) && (jahr % 100 != 0)
    			|| (jahr % 400 == 0));
    }
    
    unsigned int Datum::sonntag()
    {	int c,x,d;
    	c=jahr/100+1;		// Jahrhundert
    	x=(3*c)/4-12;     // Korrektur
    	d=(5*jahr)/4-x-10;//7+(-d%7). März ist ein Sonntag
    	return 7+(-d%7);
    

    und dann hab ich
    hauptprogramm

    #include <iostream.h>
    #include <string.h>
    #include "Datum.hpp"
    
    void main()
    {
    	..
             ..
    }
    

    und was is jetzt falsch ??
    chris



  • Ich sehe keinen Fehler.

    Du kannst jetzt die Klasse in deinem HP benutzen:

    //Include der anderen Header
    #include "datum.h"
    
    int main()
    {
      datum date; //Instanz der Klasse erstellen
      date.IsSchaltjahr() //Zugriff auf Funktionen
      date.var1 + date.var2; //Zugriff auf Variabeln
    }
    


  • chri5 schrieb:

    hi,
    hab eine datei (datum.hpp) in der meine klasse steht.
    eine datei(datum1.cpp) in der die konstruktoren , sowie verscheidene methoden für die klasse stehen ...
    und dann noch ein Hauptprogramm .. jetzt meine frage , wie bring ich das so zusammmen das es funktioniert ??
    in meinem hp steht :
    include "Datum.hpp" nur wo schreib ich rein das die konstruktoren in der datum1.cpp stehen ??
    danke
    chris

    Genau aufpassen muss man, wenn man Funktionen verwendet, die für einige ihrer Parameter Default-Werte vereinbaren, weil solche Default Parameter nur ein einziges Mal angegeben werden dürfen. Also gut aufpassen, wenn du den selben Header für mehrere Quelldateien verwenden willst, die dann zusammen zu einem Programm compiliert & gelinkt werden sollen.
    Nur ein guter Tip, der Dir vielleicht einmal hilft, ein notorisch auftretendes Problem beim Compilieren zu beheben.
    🙂



  • @chri5: du musst beim compilieren datum1.cpp mitcompilieren. dann hat main.cpp auch die konstruktoren und funktionen. (bzw die exe)

    g++: g++ (-s) main.cpp datum1.cpp -o datum.exe

    Datum.hpp musst du in datum1.cpp includieren



  • chri5 hättest du mal die güte uns mitzuteilen ob dein Problem jetzt gelöst ist??? 😕



  • hi,
    also verstanden hab ichs noch net wirklich ....
    woher weis mein hp oder mein datum.hpp das seine konstrukroren in datum1.cpp stehen ?? .....
    ich habs jetzt so gemacht das ich in mein hp
    #include "datum1.cpp"
    in mein datum1.cpp
    #include "datum.hpp"
    geschrieben hab ...
    ??
    chris
    PS ...also ich muss ein projekt erstellen, in dem dann alle dateinem mitcompiliert werden ??



  • chri5 schrieb:

    woher weis mein hp oder mein datum.hpp das seine konstrukroren in datum1.cpp stehen ??

    Das müssen sie doch gar nicht. Dein Compiler verarbeitet ja die ihm übergebenen ÜE (Übersetzungseinheiten ➡ .cpp, .cc, .c etc.pp). Und diese müssen wissen, dass eine Klasse blabla existiert. Deshalb #include "blabla.h".

    chri5 schrieb:

    ich habs jetzt so gemacht das ich in mein hp
    #include "datum1.cpp"

    Das solltest du schleunigst ändern, denn es ist definitiv die falsche Vorgehensweise, ÜE zu inkludieren.

    chri5 schrieb:

    PS ...also ich muss ein projekt erstellen, in dem dann alle dateinem mitcompiliert werden ??

    Yep, alle relevanten ÜE müssen dem Compiler mitgegeben werden.


Log in to reply