Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Definition von Funktionen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
13.06.2005, 15:24 Uhr
~Schu
Gast


Hallo Leutz !!

Ich wüßte gern, ob man Funktionen irgendwie auch in Header-Files definieren kann.
Hab's probiert, aber wenn ich nach der Deklaration auch noch versuche, die Funktion zu definieren, dann meckert der Compiler !! Dabei wär's doch so schön ein Header-File zu haben, wo man sämtliche selbst definierte FKT's, Typedef's u.ä. zusammenfassen könnte...

Thanx a lot...Schu
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.06.2005, 15:54 Uhr
virtual
Sexiest Bit alive
(Operator)


Naja, in C gibt es eben die One-Definition-Rule, die eben besagt, daß man Funktionen (aber auch alles andere) nur einmal definieren darf. Zwar kann man das dahingehend relativieren, daß diese Regel nicht für inline Funktionen bzw. Templates nicht gilt (diese müssen sogar im Header definiert werden), aber es ist gewiss keine Lösung, nun alle Funktionen inline zu machen.

Überhaupt wäre es keine Lösung, alles in einem header zu definieren, weil dadurch die Übersetzungskosten explodieren würden.

Üblicherweise geht man hin und schreibt daher einfach nur Header, die die Deklarationen enthalten und baut aus den Funktionsdefinitionen dann eine Library, welche man beim Bauen dazulinkt.

Beispielsweise könnte es ja sein, daß Du eine Primzahlberechnungsroutine geschrieben hast:

C++:
// prime.c
bool isPrime(unsigned long n) {
    if (n>4 && n%2) {
       for(unsigned i=3; i*i<=n; i += 2) {
            if (n%i==0) return false;
       }
       return true;
    }
    else {
       return n==2 || n==3;
    }
}


Was man nun macht ist eigentlich ganz simpel: man geht hin, kompiliert diese (.c) Datei, ggf macht man eine Library draus. Damit ist die Datei schon mal wiederverwendbar. Damit man sie nutzen kann, macht man noch einen Header, der aber nicht die Definition, sondern nur die Deklaration enthält:

C++:
// prime.h
#ifndef PRIME_H_INCLUDED
#define PRIME_H_INCLUDED

extern bool isPrime(unsigned long);
#endif



Anwenden kann man es dann intuitiv:

C++:
#include "prime.h"

...
if (isPrime(4711) {
    ...
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.06.2005, 16:06 Uhr
~Schu
Gast


Ok...dann heißt das also, ich müsste eine .cpp-Datei erstellen, in der ich sämtliche kleinen (Hilfs-)Funktionen definier und im entsprechenden Header-File stehen dann die dazugehörigen Deklarationen !?! Richtig !!??

Schu
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.06.2005, 16:21 Uhr
virtual
Sexiest Bit alive
(Operator)


Korrekt. Wenn Du diesbezüglich Probleme hast, einfach noch mal posten.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.06.2005, 16:29 Uhr
~Schu
Gast


Für's erste habe ich nur noch eine Frage....woher bekommst du das PRIME_H_INCLUDED ?? Würde es auch funzen, wenn ich einfach
C++:
#include "meinefunktionen.cpp"
in meine Header-File schriebe ??

Thanx a Lot !!
Schu
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.06.2005, 16:58 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Für's erste habe ich nur noch eine Frage....woher bekommst du das PRIME_H_INCLUDED ?? Würde es auch funzen, wenn ich einfach


Das ist ein include-guard...
Damit verhindert man mehrfaches includieren und du musst dir um weniger ein kopf machen. Sollte jeder deiner Header haben.
Kannst ja mal im Forum nach suchen oder googeln. Da ist das ausführlich beschrieben.
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
13.06.2005, 23:22 Uhr
mmc20
puss in boots


hi, fällt mir gerade auf...
was sollte man eigentlich verwenden:

#ifndef BLA_BLA

oder

#if !defined(BLA_BLA)

der VC++ nimmt beides.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
14.06.2005, 09:51 Uhr
Th



Ich finde

C++:
#ifndef PRIME_H_INCLUDED
#define PRIME_H_INCLUDED

#endif


schöner, da dort die beiden Namen direkt untereinanderstehen (wegen evtl. Tippfehler), während man bei der anderen Schreibweise auch logische Operationen anwenden kann

C++:
#if !defined(X) && !defined(Y)

#endif

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
14.06.2005, 10:57 Uhr
virtual
Sexiest Bit alive
(Operator)


@Schu
Ich weiß ja nicht, wie es kommt, aber bestimmte Fehler häufen sich zu bestimmten Zeitpunkten:
Man includiert keine .cpp Dateien! - Lies bitte genau, was ich in Post 001 geschrieben habe, vor allem bzgl. der Tatsache, daß ich eine Unterscheidung zwischen Definition und Deklaration mache (eigentlich nicht ich, sondern C). Wenn für dich Definition und Deklaration das gleiche sind, fang gar nicht erst mit komplexeren C Programmen an, sondern lerne davor den Unterschied!
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
14.06.2005, 10:57 Uhr
~Schu
Gast


Hmmm...hab's jetzt mal gemacht, wie hier empfohlen, also:


Code:
// myFunctions.cpp

BOOL isPressed(const int& c)
{............

}


und die Header-Datei:


Code:
// myFunctions.h - Definition von eigenen Konstanten, Datentypen etc....
//
//////////////////////////////////////////////////////////////////////
#include <iostream>
#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <math.h>
#include <conio.h>
#include <vector>


#ifndef MYFUNCTIONS_H_INCLUDED
#define MYFUNCTIONS_H_INCLUDED

/*
*Deklaration von Funktionen
*/
extern BOOL isPressed(const int&);
extern BOOL containsKey(int, int[]);

#endif
......


Aber er schmeißt mir gleich 3 Fehler beim Compilieren, weil die .cpp-Datei die Header-Datei nicht findet !!

Was ist falsch ??
(PS: Es funzt, wenn ich die Header-Datei im .cpp includiere...aber das würde doch den Guards widersprechen, oder ??)

Thanx a Lot..Schu
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: