Klassen in Static Library packen



  • Hallo,

    ich habe vor eine statische Library zu bauen auf deren Klassen und Funktionen ich von anderen Projekten zugreifen will.
    Nun klappt das mit den Funktionen schon nur wenn ich die Klassen benutzen will, habe ich noch Probleme und der Compiler beschwert sich.

    #ifndef TESTCLASS_H_
    #define TESTCLASS_H_
    
    #include "iostream"
    
    class TestClass
    {
    public:
    	TestClass();
    	virtual ~TestClass();
    };
    
    #endif /*TESTCLASS_H_*/
    
    #include "TestClass.h"
    
    TestClass::TestClass()
    {
    	std::cout<<"Hallo Klasse"<<std::endl;
    }
    
    TestClass::~TestClass()
    {
    	std::cout<<"Tschüss Klasse"<<std::endl;
    }
    
    #include <iostream>
    
    void SayHello();
    class TestClass;
    
    int main ()
    {
    	SayHello();
    	TestClass* Test = new TestClass(); 
    	//hier beschwert sich der Compiler wegen Forward-Deklaration von TestClass
    	return 1;	
    }
    

    Wie gesagt. SayHello gibt einfach einen Text auch das klappt soweit. Nur die Klasse eben nicht.
    Ich hatte versucht die Klasse mit eine Forward Deklaration einzubinden, aber wenn ich dann ein neues Objekt anlegen will, klappts nicht. Was ja auch Sinn macht, aber ich weiß jetzt nicht wie ich die Klasse da rein bekomme. Normalerweise würde ich ja ein include nehmen, aber bei einer Library?

    Kann mir jemand nen Tip geben?

    Danke



  • Den Header musste schon einbinden. Sonst erkennt der Compiler den Typen nicht als vollständig deklariert.

    Die definition ist was in der statischen library ist. Nicht aber die header mit der deklaration.

    BR
    Vinzenz



  • Normalerweise würde ich ja ein include nehmen, aber bei einer Library?

    Da auch.



  • Hmm, wenn ich jetzt das include auf den Pfad von der Library (also dort wo Header und cpp liegen) mache, klappt das ja auch.
    Aber dann verstehe ich den SInn nicht von den Libraries.
    Wenn ich sowieso die Header mitliefern muß, kann ich auch noch die cpp mitgeben und ich spare mir die Lib.
    Ich dachte, die Libs wären so gedacht, daß man einfach angibt wo die liegt und dann könnte man auf deren Funktionen und Methoden zugreifen.

    Was ist denn dann der Vorteil von libs?

    Gruß



  • Emmerell schrieb:

    Hmm, wenn ich jetzt das include auf den Pfad von der Library (also dort wo Header und cpp liegen) mache, klappt das ja auch.
    Aber dann verstehe ich den SInn nicht von den Libraries.
    Wenn ich sowieso die Header mitliefern muß, kann ich auch noch die cpp mitgeben und ich spare mir die Lib.
    Ich dachte, die Libs wären so gedacht, daß man einfach angibt wo die liegt und dann könnte man auf deren Funktionen und Methoden zugreifen.

    Was ist denn dann der Vorteil von libs?

    Gruß

    Der Header beschreibt das Interface Deiner Funktionen, also was rein geht, was raus geht, die Namen und ggf. die Daten. Im cpp steht drin, was wie getan werden soll.
    Der Bunutzer einer Lib muss nur wissen, was eine Funktion/Klasse tut, was die Bedingungen sind, damit alles ordnungsgemäß läuft und was die Klassen/Funktionen machen. Er muss nicht wissen, wie sie es machen.
    z.B. die sin(x) Funktion aus <cmath>. Da weisst Du, dass sie den Sinus des gegeneben Wertes berechnet, Du weisst, was reingeht und was rauskommt, Du weisst aber nicht, was intern abläuft um zum Ergebnis zu kommen. Das musst Du auch nicht wissen...



  • in zeile 4 machste doch auch nen include(iostream)!
    Schau dir mal den include ordner von deinem compiler an! Der müsste voll mit headern sein...



  • Morgen zusammen,

    da habt ihr natürlich recht ;-). Ich habe immer Dateien inkludiert und nie so recht drübernachgedacht :-). Jetzt macht das alles auch Sinn mit der Lib.

    Danke, jetzt funzt alles so wie gewünscht.

    Gruß


Anmelden zum Antworten