C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Probleme mit Header und Klassen

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Werner Heise
Guest





PostPosted: Sat Apr 24, 2004 2:52 pm    Post subject: Probleme mit Header und Klassen Reply with quote



Hallo, ich habe folgenden Programmaufbau:

main.cpp

klasse.cpp
klasse.h

Funktion.cpp
Funktion.h

Wobei die in klasse.cpp die Klassen und in Funktion.cpp die Funktionen
stehen.

Nun habe ich in der Main die restlichen vier Dateien included und in der
klasse.cpp die klasse.h und in der Funktion.cpp die funktion.h.

Das Problem an der ganzen Sache ist, dass ich in der Funktion.h bzw.
Funktion.cpp mit funktionen arbeiten möchte, die auch die Klassen aus
klasse.cpp bzw .h verwenden.

Beim Einbinden von klasse.h in Funktion.h bricht der Linker jedoch mit dem
Fehler

error C2065: 'cKlasseA' : nichtdeklarierter Bezeichner

ab und beim Includen in Funktion.cpp mit der Fehlermeldung:

fatal error LNK1169: Ein oder mehrere mehrfach definierte Symbole gefunden

ab, obwohl die klasse.h wie folgt aussieht:

#ifndef MYCLASSES_H
#define MYCLASSES_H

class cKlasseA;

#endif


Ich weiss echt nicht mehr weiter, kann mir da bitte jemand helfen?

Danke
Wern

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Rolf Magnus
Guest





PostPosted: Sat Apr 24, 2004 11:44 pm    Post subject: Re: Probleme mit Header und Klassen Reply with quote



Werner Heise wrote:

Quote:
Hallo, ich habe folgenden Programmaufbau:

main.cpp

klasse.cpp
klasse.h

Funktion.cpp
Funktion.h

Wobei die in klasse.cpp die Klassen und in Funktion.cpp die Funktionen
stehen.

Nun habe ich in der Main die restlichen vier Dateien included und in
der klasse.cpp die klasse.h und in der Funktion.cpp die funktion.h.

Das Problem an der ganzen Sache ist, dass ich in der Funktion.h bzw.
Funktion.cpp mit funktionen arbeiten möchte, die auch die Klassen aus
klasse.cpp bzw .h verwenden.

Beim Einbinden von klasse.h in Funktion.h bricht der Linker jedoch mit
dem Fehler

error C2065: 'cKlasseA' : nichtdeklarierter Bezeichner

ab und beim Includen in Funktion.cpp mit der Fehlermeldung:

fatal error LNK1169: Ein oder mehrere mehrfach definierte Symbole
gefunden

ab, obwohl die klasse.h wie folgt aussieht:

#ifndef MYCLASSES_H
#define MYCLASSES_H

class cKlasseA;

#endif

Das ist alles? Damit ist das eine Vorwärzdeklaration von cKlasseA. Wo
ist denn die Definition und warum steht die nicht im Header?

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Marco Budde
Guest





PostPosted: Sun Apr 25, 2004 11:42 am    Post subject: Re: Probleme mit Header und Klassen Reply with quote



Werner Heise wrote:

Quote:
Nun habe ich in der Main die restlichen vier Dateien included

Warum denn das? Man included nur die *.h Files. Die *.cpp Files werden
jeweils getrennt übersetzt und am Ende zu einem Programm gelinkt.

Quote:
und in der
klasse.cpp die klasse.h und in der Funktion.cpp die funktion.h.

Das Problem an der ganzen Sache ist, dass ich in der Funktion.h bzw.
Funktion.cpp mit funktionen arbeiten möchte, die auch die Klassen aus
klasse.cpp bzw .h verwenden.

Das Problem ist eher, daß Du lernen solltest Fehler Du möglichst kurze
Beispiele zu dokumentieren. Mit diesem ganzen Text kann niemand was
anfangen.

Quote:
Beim Einbinden von klasse.h in Funktion.h bricht der Linker jedoch mit dem
Fehler

Ein Linker kennt weder *.h noch *.cpp Dateien. Du meinst den Compiler.

Quote:
error C2065: 'cKlasseA' : nichtdeklarierter Bezeichner

ab und beim Includen in Funktion.cpp mit der Fehlermeldung:

fatal error LNK1169: Ein oder mehrere mehrfach definierte Symbole gefunden

ab, obwohl die klasse.h wie folgt aussieht:

#ifndef MYCLASSES_H
#define MYCLASSES_H

class cKlasseA;

#endif

Und was soll das darstellen? Damit ist das Interface der Klasse nicht
bekannt.

Quote:
Ich weiss echt nicht mehr weiter, kann mir da bitte jemand helfen?

So kaum möglich.

cu, Marco
--
S: Minolta: Winkelsucher (VN), VC-9

E-Mail: mb-news-b<ät>linuxhaven.de
Deutsches Linux HOWTO Projekt: http://www.linuxhaven.de

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Ingo Nolden
Guest





PostPosted: Mon Apr 26, 2004 9:05 pm    Post subject: Re: Probleme mit Header und Klassen Reply with quote

Hi,

das Problem ist klar. Ich bin am Anfang auch etwas durcheinandergeraten beim Umstieg von VB nach c++.

dieses ganze header zeug.

Aber wenn mans raushat ist es irgendwie gar nciht so schlecht.

Also wenn Du in Deiner Entwicklungsumgebung "Erzeugen" drückst passiert folgendes:

jedes .cpp file wird compiliert und es entsteht je ein .obj file.

Dann kommt der Linker und sucht zu jedem Funktionsaufruf cKlasseInstanz.function( iDepp ); die passende
implementierung: cKlasse::function( int ); und bastelt die beiden zusammen.

Am besten mal von Hand machen also den compiler und den Linker die Files einzeln nacheinander
durchnudeln lassen.

Wozu jetzt die header files:
Der Compiler braucht um einen Funktionsaufruf zu compilieren entweder die Funktion, oder die Deklaration

Die Deklaration ist z.B:
int Func( int iDepp );

Theoretisch müsstest Du diese deklaration also in das cpp file schreiben indem Du die Funktion aufrufen
möchtest, bzw. in allen cpp-files in denen Du sie aufrufst.

deshalb gibt es die header files.
Dort schreibst Du die deklarationen rein und includest sie mit #include "MyFuncs.h"
die cpp files solltest Du nicht includen, da der compiler sie ja sowieso compiliert und sie sonst zweimal in den
..obj auftauchen und dann der Linker durcheinanderkommt.

Ausserdem solltest Du Dein Headerfile auch in das cpp includen wo die im Header deklarierten functionen
definiert ( implementiert ) sind. Im Falle von Memberfunctionen wird dann im Header die Klassendefinition
stehen:
class A
{
int var;
int func( );
};
und im cpp die definition der Functionen:
int A::func( )
{
blubb( );
}

und wenn eine Funktion nicht deklariert war (tippfehler) dann meckert der compiler.

so nun viel spaß damit :-)




Werner Heise
wrote in message: <c6duvd$ai0ra$1 (AT) ID-6265 (DOT) news.uni-berlin.de>

Quote:
Hallo, ich habe folgenden Programmaufbau:

main.cpp

klasse.cpp
klasse.h

Funktion.cpp
Funktion.h

Wobei die in klasse.cpp die Klassen und in Funktion.cpp die Funktionen
stehen.

Nun habe ich in der Main die restlichen vier Dateien included und in der
klasse.cpp die klasse.h und in der Funktion.cpp die funktion.h.

Das Problem an der ganzen Sache ist, dass ich in der Funktion.h bzw.
Funktion.cpp mit funktionen arbeiten möchte, die auch die Klassen aus
klasse.cpp bzw .h verwenden.

Beim Einbinden von klasse.h in Funktion.h bricht der Linker jedoch mit dem
Fehler

error C2065: 'cKlasseA' : nichtdeklarierter Bezeichner

ab und beim Includen in Funktion.cpp mit der Fehlermeldung:

fatal error LNK1169: Ein oder mehrere mehrfach definierte Symbole gefunden

ab, obwohl die klasse.h wie folgt aussieht:

#ifndef MYCLASSES_H
#define MYCLASSES_H

class cKlasseA;

#endif


Ich weiss echt nicht mehr weiter, kann mir da bitte jemand helfen?

Danke
Wern

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de


--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.