Wie kann man eine Funktion innerhalb eine Projektes in meherenen Dateien nutzen?
-
...Für viele sichr nur Routine aber da ich in C++ bisher nur kleine Standalone-Programme gebaut habe, war das bisher nicht notwendig.
Ich wäre dankbar, wenn das jemand leicht verständlich erklären könnte...Beispiel:
Ich habe quasi eine Hauptdatei.fmain.cpp
darin ist neben der main-Funktion eine Funktion namens int test(), die mir irgendwas ausrechnet und mir einen int-Wert zurückgibt. Diese möchte ich nun in allen anderen Dateien drum herum nutzen können.
z.B: f1.cpp, f2.cpp, f3.cpp...
Ich nehme mal an, dass das über Klassen laufen müsste, nur habe ich das bisher nicht so recht gerafft und würde das gerne mal etwas "plastischer" nachvollziehen können. Ich hoffe es kann jemand helfen. Danke im Voraus!

-
Dein Headerfile z.B. myfunc.h
#ifndef __MY_TEST_H__ #define __MY_TEST_H__ 1 int test(); #endifDie Implementierung der Funktionen (myfunc.cpp)
#include "myfunc.h" int test() { // Tu was... return 1; }Dein Hauptprogramm
#include "myfunc.h" int main() { int erg = test(); }EDIT:
Du solltest deine Funktion(en) in seperate Dateien auslagern.
Dazu solltest du immer zwei Dateien anlegen. Ein Headerfile(.h) und ein Sourcefile(.cpp)In der .h File stehen nur Deklarationen und in dem .cpp File stehen die Definitionen.
Jetzt brauchst du nur noch#include "myfunc.h"überall dort zu verwenden, wo du deine Funktion(en) brauchst.
-
Ich kann also dann die Funktion quasi so wie sie in einer eigenständigen cpp drin wäre in der cpp-datei verwenden wo ich sie denn eben brauche. Sie muss nur in passenden h-Datei sein, so wie hier?:
#ifndef __MY_TEST_H__ #define __MY_TEST_H__ 1 int test(); #endif... und dann noch einen Verweis in der cpp, in der sich die Funktion befindet, auf diese h-Datei machen...
#include "myfunc.h" int test() { // Tu was... return 1; }Wie ist das zu verstehen:
#ifndef __MY_TEST_H__ #define __MY_TEST_H__ 1Woher weis ich was ich da hinschreiben muss?
-
Such dir irgendwas aus, wichtig ist nur, dass der Name des Makros innerhalb deines Projekts (und am besten noch darüber hinaus) einmalig ist.
-
Danke, werd mal sehen ob's klappt!
-
das mit #ifdef ist so u verstehen, dass man ja nicht mehrmals in einem Projekt die gleichen Funktionsprototypen haben darf, aber wenn der im header eines anderen Moduls die #include anweisung des gleichen headers steht, dass es dann nicht zu Fehlern kommt. Dazu wird erst abgefragt, ob eine Variable nicht existiert (mit #ifndef), falls dies doch der Fall sein sollte, wird einfach der gesamte quellcode von #ifndef bis #ifdef ignoriert. Mit #define schafft man nun diese Variable, für gewöhnlich nimmt man den Namen des Header in Großbuchstaben mit _ davor und dahinter, du kannst aber auch alles andere nehmen. der initialisierungswert (hier 1) ist aber völlig egal, du kannst ihn auch weglassen, denn du fragst ja nur ab, ob eine variable zu einem bestimmten zeitpunkt bereits bekannt ist, nicht welchen wert sie hat. Gibst du keinen Wert an wird dieser Automatisch auf 0 gesetzt.
-
Das hat funktiniert. Habs auch mal mit Argumenten in der Funktion probiert... geht alles!
-
sehr schoen erklaert {=
ich benutz meistens nen eindeutigen namen
#ifndef __LOGGING_ACTIONS__ #define __LOGGING_ACTIONS__ class CLogging : ... ... #endif
-
Mr Evil schrieb:
sehr schoen erklaert {=
ich benutz meistens nen eindeutigen namen
#ifndef __LOGGING_ACTIONS__ #define __LOGGING_ACTIONS__ class CLogging : ... ... #endifAlso einen eindeutigen Namen (zumindest projektweit eindeutig) sollte man immer benutzen. Deine Namenskonvention hingegen besser nicht: Namen die zwei Unterstriche enthalten sowie Namen, die mit einem Unterstrich gefolgt von einem Großbuchstaben beginnen, sind für die Implementation reserviert und sollten deshalb vermieden werden.
Aber sowas wie:#ifndef LOGGING_ACTIONS_H_INCLUDED #define LOGGING_ACTIONS_H_INCLUDEDtut's ja auch.