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 

Code auf mehrere Dateien verteilen?

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





PostPosted: Mon Apr 05, 2004 1:15 pm    Post subject: Code auf mehrere Dateien verteilen? Reply with quote



Hallo,
bin relativer C++ Anfaenger. Zumindest habe ich gerade mein erstes
Projekt. Meine Quellcode-Datei wird langsam etwas gross und
unuebersichtlich und ich wuerde gerne ein paar Funktionen in separate
Dateien auslagern.
Mir ist noch nicht ganz klar, wie man das ueblicherweise organisiert,
denn ich kriege beim Compilieren Probleme mit fehlenden Header-Dateien.

Also konkret, angenommen ich habe meinen gesamten Code in program.cpp in
folgender Struktur:
include-Dateien
Klassendeklaration
Prototypen
main
Funktionen

Angenommen, ich schreibe jetzt eine Funktion, namens funktion1() in eine
separate Datei funktion1.cpp und gebe diese beim Kompilieren mit an,
dann kriege ich eine Fehlermeldung, die daher ruehrt, dass die
entsprechende Bibliotheks-Header-Datei (sagen wir biblio.h), die in
programm.cpp eingebunden wird, nicht beruecksichtigt wurde (die aber von
funktion1() benoetigt wird). Wenn ich diese aber am Anfang von
funktion1.cpp einbinde, funktioniert es genau so wenig.
Macht meine Vorgehensweise Sinn? Wie organisiert man das normalerweise?
Merci
Dominik

--
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
Christoph Rabel
Guest





PostPosted: Mon Apr 05, 2004 2:26 pm    Post subject: Re: Code auf mehrere Dateien verteilen? Reply with quote



Dominik Dell wrote:
Quote:
Mir ist noch nicht ganz klar, wie man das ueblicherweise organisiert,
denn ich kriege beim Compilieren Probleme mit fehlenden Header-Dateien.

Also konkret, angenommen ich habe meinen gesamten Code in program.cpp in
folgender Struktur:
include-Dateien
Klassendeklaration

Klassendeklarationen solltest du in den/die Header geben.

Quote:
Prototypen

dito.

Quote:
main
Funktionen

Angenommen, ich schreibe jetzt eine Funktion, namens funktion1() in eine
separate Datei funktion1.cpp und gebe diese beim Kompilieren mit an,
dann kriege ich eine Fehlermeldung, die daher ruehrt, dass die
entsprechende Bibliotheks-Header-Datei (sagen wir biblio.h), die in
programm.cpp eingebunden wird, nicht beruecksichtigt wurde (die aber von
funktion1() benoetigt wird). Wenn ich diese aber am Anfang von
funktion1.cpp einbinde, funktioniert es genau so wenig.

Warum nicht?

Wir brauchen mehr Input um dir zu helfen. Am besten postest du erstmal
die Fehlermeldungen und falls der Code kurz genug ist auch diesen bzw.
du versuchst die relevanten Teile zu posten.

Quote:
Macht meine Vorgehensweise Sinn? Wie organisiert man das normalerweise?

Ja, das passt glaube ich schon so was du vorhast. Ich vermute es
scheitert eher an den Details...

mfg

Christoph

--
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
Wolfgang Kaufmann
Guest





PostPosted: Mon Apr 05, 2004 6:51 pm    Post subject: Re: Code auf mehrere Dateien verteilen? Reply with quote



* Thus spoke Dominik Dell <dell (AT) lpsc (DOT) in2p3.fr>:

Hallo,

Quote:
bin relativer C++ Anfaenger. Zumindest habe ich gerade mein erstes
Projekt. Meine Quellcode-Datei wird langsam etwas gross und
unuebersichtlich und ich wuerde gerne ein paar Funktionen in separate
Dateien auslagern.
Mir ist noch nicht ganz klar, wie man das ueblicherweise organisiert,
denn ich kriege beim Compilieren Probleme mit fehlenden Header-Dateien.

Hier ein Minimal-Beispiel das Dir vielleicht weiterhilft:

Datei: foo.hpp
Quote:
ifndef FOO_HPP__INCLUDED
#define FOO_HPP__INCLUDED
#include
char funktion1(const std::string text, int index);

#endif

Datei: foo.cpp
Quote:
#include "foo.hpp"

char funktion1(const std::string text, int index) {
return text.at(index);
}

Datei: foo-main.cpp
Quote:
#include "foo.hpp"
#include
int main() {
std::string text("einszweidrei");
int index = 4;
std::cout << "An Stelle: " << index << " des Strings " << text
" steht: " << funktion1(text, index) << std::endl;
}

Übersetzen bsp. mit:

$ g++ -Wall foo-main.cpp foo.cpp -o foo-programm


Wolfgang.
--
"If you've a highlighter pen, these lines above have got to be marked."

--
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
Dominik Dell
Guest





PostPosted: Thu Apr 08, 2004 4:00 pm    Post subject: Re: Code auf mehrere Dateien verteilen? Reply with quote

Hallo,
Danke fuer die Tipps, die Links zu dem Tutorial waren sehr hilfreich.
Ich habe jetzt meine Funktionen auf mehrere *.cpp-Dateien verteilt, das
ganze mit einer Header-Datei, die folgendermassen aussieht:

#ifndef program_hpp_INCLUDED
#define program_hpp_INCLUDED
[Include-Dateien]
[Klassen-Deklaration]
[Funktions-Prototypen]
#endif

Die Header-Datei habe ich in alle *.cpp-Dateien eingebunden (include)
und es funktioniert einwandfrei.

Jetzt ist es doch aber wahrscheinlich sinnvoll und auch uebersichtlicher
fuer jede *.cpp-Datei auch eine eigene *.hpp-Datei zu erstellen. Das
habe ich versucht. Und wieder in mehrere *.cpp-Dateien eingebunden, da
sonst vom Compiler (g++) die Fehlermeldung kam, dass er irgendwelche
Funktionen noch nicht kennt. Wenn ich das aber tue, dann kriege ich eine
Fehlermeldung vom Typ "multiple definiton of" (genaues siehe unten).
Ich habe natuerlich in alle *.hpp-Dateien Praeprozessor-Anweisungen von
obigem Typ eingebaut, die ja eigentlich verhindern sollten, dass
irgendwas mehrfach eingebunden wird. Was mache ich dabei noch falsch?

Fehlermeldungen:

$ make qg2sn
g++ -o a qg2sn.cpp vegas.cpp integrand.cpp display.cpp pdf.o
.../../gsl/.libs/libgsl.a -lm
-L/utils/cern/2003/lib -lpacklib -lpdflib804 -lmathlib -lkernlib
-lg2c
/tmp/cckGYAp3.o: In function `variable_transformation(double *, Param,
double &, double &, double &, double &)':
/tmp/cckGYAp3.o(.text+0x0): multiple definition of
`variable_transformation(double *, Param, double &, double &, double &,
double &)'
[...]
/tmp/cckGYAp3.o: In function `integrand(double *, unsigned int, void *)':
/tmp/cckGYAp3.o(.text+0x60c): multiple definition of `integrand(double
*, unsigned int, void *)'
/tmp/ccf3skmg.o(.text+0x60c): first defined here
collect2: ld returned 1 exit status
make: *** [qg2sn] Error 1


Aufbau von integrand.hpp:

#ifndef integrand_hpp_INCLUDED
#define integrand_hpp_INCLUDED

double integrand (double *k, size_t dim, void *para);
void variable_transformation(double x[3], Param p, double &xa, double
&xb, double &t, double &djac);
[weitere Prototypen]

#endif

Danke
Dominik

--
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: Sun Apr 11, 2004 2:05 pm    Post subject: Re: Code auf mehrere Dateien verteilen? Reply with quote

Dominik Dell wrote:

Quote:
Hallo,
Danke fuer die Tipps, die Links zu dem Tutorial waren sehr hilfreich.
Ich habe jetzt meine Funktionen auf mehrere *.cpp-Dateien verteilt,
das ganze mit einer Header-Datei, die folgendermassen aussieht:

#ifndef program_hpp_INCLUDED
#define program_hpp_INCLUDED
[Include-Dateien]
[Klassen-Deklaration]
[Funktions-Prototypen]
#endif

Die Header-Datei habe ich in alle *.cpp-Dateien eingebunden (include)
und es funktioniert einwandfrei.

Jetzt ist es doch aber wahrscheinlich sinnvoll und auch
uebersichtlicher fuer jede *.cpp-Datei auch eine eigene *.hpp-Datei zu
erstellen.

Das ist richtig. Das sollte man grundsätzlich tun.

Quote:
Das habe ich versucht. Und wieder in mehrere *.cpp-Dateien
eingebunden, da sonst vom Compiler (g++) die Fehlermeldung kam, dass
er irgendwelche Funktionen noch nicht kennt. Wenn ich das aber tue,
dann kriege ich eine Fehlermeldung vom Typ "multiple definiton of"
(genaues siehe unten). Ich habe natuerlich in alle *.hpp-Dateien
Praeprozessor-Anweisungen von obigem Typ eingebaut, die ja eigentlich
verhindern sollten, dass irgendwas mehrfach eingebunden wird.

Nur innerhalb einer Übersetzungseinheit.

Quote:
Was mache ich dabei noch falsch?

Mit den Informationen ist das schwer zu sagen.

Quote:

Fehlermeldungen:

$ make qg2sn
g++ -o a qg2sn.cpp vegas.cpp integrand.cpp display.cpp pdf.o
../../gsl/.libs/libgsl.a -lm
-L/utils/cern/2003/lib -lpacklib -lpdflib804 -lmathlib -lkernlib
-lg2c
/tmp/cckGYAp3.o: In function `variable_transformation(double *, Param,
double &, double &, double &, double &)':
/tmp/cckGYAp3.o(.text+0x0): multiple definition of
`variable_transformation(double *, Param, double &, double &, double
&, double &)'

Der Compiler findet offensichtlich mehrere Implementationen der Funktion
varaible_transformation. Wenn du jedes File einzeln compilierst und
erst am Schluß alles linkst (Was eh besser ist), stehen statt den
kryptischen Filenamen (/tmp/cckGYAp3.o) welche, die dir sagen, wo die
Mehrfachdefinition steckt.

Quote:
[...]
/tmp/cckGYAp3.o: In function `integrand(double *, unsigned int, void
*)': /tmp/cckGYAp3.o(.text+0x60c): multiple definition of
`integrand(double *, unsigned int, void *)'
/tmp/ccf3skmg.o(.text+0x60c): first defined here
collect2: ld returned 1 exit status
make: *** [qg2sn] Error 1


Aufbau von integrand.hpp:

#ifndef integrand_hpp_INCLUDED
#define integrand_hpp_INCLUDED

double integrand (double *k, size_t dim, void *para);
void variable_transformation(double x[3], Param p, double &xa, double
&xb, double &t, double &djac);
[weitere Prototypen]

#endif

Sieht soweit ok aus.

--
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.