Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi, im Moment benutzte ich noch die Autorenversion von MSVC++6, aber eigentlich brauch ich die nur zum kompilieren, meinen eigentlichen Code schreibe ich in notepad++. Das alles tut nichts zur Sache. Mir gehts im allgemeinen darum, wie ich mir einen eigenen Header schreiben und den dann in meinen Quellcode einbinden. Falls es da Unterschiede bei Win/Linux (man weiß ja nie) geben sollte bei dieser Sache, bitte posten, ist mir sehr wichtig.

Danke schon mal im Vorraus.

Geschrieben
:D Hmm, allgemein, was muss ich definieren, damit die Sache läuft.
Allgemein: Deklaration in die Headerdatei, Definitionen in die Quellcodedatei. Die Frage ist aber ungefähr so genau zu beantworten wie

"Was muss ich in den Topf tun, damit die Sache schmeckt"

Es kommt eben darauf an, was du vorhast. Rein theoretisch könntest du auf Headerdateien auch komplett verzichten.

Geschrieben

Okay, dann geb ich mal ein Beispiel von dem was ich vorhabe:

Als ich hab da meinen Quellcode und so, der ist mir aber zu lang, also möcht ich ein paar Funktionen in einer Headerdatei auslagern, damit alles etwas übersichtlicher wird.

Jetzt ist halt die Frag bei mir, was muss alles in den Header rein (Funktion+Funktion-Prototyp?), wo ich den Header dann speichern muss und wie ich den dann in mein main einfüge.

Ich hoffe jetzt wirds klarer.

Geschrieben

Hallo,

in Headerdateien kommen ausschließlich Deklarationen rein, Definitionen nur in Ausnahmefällen (Einzeiler oder Templates).

Der Standardfall sieht so aus:


// Datei: Rechne.hpp
// Nur Deklarationen, also die Signatur der Funktion, Parameter, Rückgabewert...
#ifndef RECHNE_HPP
#define RECHNE_HPP
int rechne(int zahl);
#endif

[/php]

[php]
// Datei: Rechne.cpp
// Die Funktionsdefinition, also das, was die Funktion tut
// Wichtig: Inkludiert die Deklaration
#include "rechne.hpp"

int rechne(int zahl)
{
return zahl*zahl;
}


// Main.cpp
// Fügt das alles zusammen
// Wichtig: Inkludiert auch die Deklaration von der Funktion...
#include <iostream>
#include "rechne.hpp"

int main()
{
std::cout << rechne(2);
}

[/php]

Diese Beispiel ist nur suboptimal, weil man eben genau das, da es sich um einen Einzeiler handelt, schonmal in die Headerdatei einfügt. Wenn es sich um eine längere Funktion handelt, bietet sich so eine Aufteilung an.

Geschrieben

Hi,

so wie ich dich verstanden habe, willst du deinen (riesigen) Quellcode in mehrere Dateien aufteilen.

Als ich hab da meinen Quellcode und so, der ist mir aber zu lang, also möcht ich ein paar Funktionen in einer Headerdatei auslagern, damit alles etwas übersichtlicher wird.

Diese Dateien sind nicht zwangsläufig nur Header Dateien (*.h bzw *.hpp), sondern eben auch C-Dateien (*.c bzw *.cpp), die ich hier mal als Module bezeichnen will.

Diese Vorgehensweise findet meine vollste Unterstützung!

Folgendes musst du beachten.

Alle Funktionen die vom Thema her zusammengehören in einem Modul zusammenfassen. Zu jedem Modul eine gleichnamige Header-Datei erstellen.

In jedem Modul das Funktionen eines anderen Modul nutzt, ein #include "modulxxx.h" einfügen, sonst meckert der Compiler.

Da du ja alles von Hand machst, und der Linker nicht wissen kann was nun zu tun ist, muss du eine Make-Datei (*.mak) erstellen.

Die EXE-Datei erstellst du dann mit make <makefile>

Allerdings spricht nichts dagegen die IDE zu verwenden. Alle oben beschriebenen manuellen Arbeiten werden dir abgenommen, und du kannst dich auf das Wesentliche (die Programmierung) konzentrieren...

Geschrieben
Hi,

so wie ich dich verstanden habe, willst du deinen (riesigen) Quellcode in mehrere Dateien aufteilen.

Bingo! Okay, ich schau mal ob ich das so hinkrieg.

Nur noch ne kleine Frage der Interesse halber: Ich hab mal gehört, das es sinnvoll sei, für jede Klasse einen eigenen Header zu schreiben. So eine Erklärung wie oben und ich wär glücklich. :)

Allerdings, ich hab mir das mal mit dem makefile angeschaut, also ich find das sieht ziemlich komplex & kompliziert aus, was ich da bei gnu gesehen hab. Irre ich mich oder ist das schon so einen Sache für sich.

Geschrieben

Hi,

also, wenn man über die IDE eine neue Klasse hinzufügt, wird für diese auch ein neues Modul (CPP-Datei + Header-Datei) angelegt. Der Dateiname entspricht (im Allgemeinen) dem Klassennamen ohne das führende C (z.B. Klasse CMyClass -> MyClass.cpp + MyClass.h).

Das muss man aber nicht für ALLE Klassen machen, die im Projekt verwendet werden.

Mal angenommen du willst ein Programm schreiben, das Logische Gatter simuliert. Da gibt's ja jede Menge unterschiedlicher Typen (AND,NAND,OR,NOR,NOT usw.). Damit ist klar, das du 'ne Basisklasse für die Logik brauchst (1.Modul). Auch eine Basisklasse für die Darstellung ist notwendig (2.Modul). Es wäre aber übertrieben, für die einzelnen Gattter, die von den Basisklassen abgeleitet werden, jeweils ein Modul zu verwenden. Die landen also alle in einem Modul (3.Modul).

Aber das war nur EIN Beispiel. Immer dann wenn dein Quellcode zu unübersichtlich (zu gross) wird, solltest du dir Gedanken machen, diesen in meherer Module zu Teilen.

Das mit den Makefiles must du dir anlesen. Ich kann dir nur soviel sagen, dass darin die Abhängigkeiten der einzelnen Module, die Anweisungen für den Compiler, und die Anweisungen für den Linker stehen.

Das wird, je mehr Module Verwendung finden, umso aufwendiger.

Wenn du den steinigen Weg gehen willst, tue das. Für einfache Konsolenanwendungen wirst du auch ganz gut damit klarkommen.

Sobald du aber die erste Windows-Applikation schreibst, rate ich dir ausschliesslich die IDE zu verwenden. ;)

  • 2 Jahre später...
Geschrieben

*hoch hol*

Hallo :wink:

Ich missbrauche den Thread mal für meine Frage:

Ich bin dabei ein kleines Programm für die Nullstellenberechnung von Potenzfunktionen zu schreiben, die man so in der 10. Klasse vorgesetzt bekommt (also alles ganzzahlige Lösungen bis auf die von quadratischen Funktionen).

Jetzt habe ich es schon einmal implementiert, wollt es optimieren und habe mir genauso wie der Threadstarter gedacht: Mach es übersichtlicher, pack die Funktionen für pq/hornerschema in einen Header.

Leichter gesagt als getan, auch nach dem ich hier gelesen habe...

Er möchte beim kompilieren beim besten Willen die Funktion, die ich zuvor in einem hornerschema.h deklariert und in hornerschema.cpp definiert habe, finden.

potenzfunktionen.cpp:(.text+0x113): undefined reference to `getFaktoren(float*, int)'

collect2: ld gab 1 als Ende-Status zurück

meckert mein Compiler und ich kann mir einfach nicht erklären warum.

Hier der Code der hornerschema.h:


#ifndef GETFAKTOREN_H

#define GETFAKTOREN_H

void getFaktoren(float *pFaktorenArray, int anzahlFaktoren);

#endif

Hier hornerschema.cpp:

#include<iostream>

#include "hornerschema.h"


void getFaktoren(float *pFaktorenArray, int anzahlFaktoren)

{

  .....

}

Und aufrufen tue ich die Funktion im Hauptprogramm einfach mit getFaktoren. Ich habe es mit hornerschema.getFaktoren und hornerschema::getFaktoren versucht, wie mein Lehrer es mir sagte, aber beides bringt mir "Hornerschema ist in diesem Gültigkeitsbereich nicht definiert". Von einem Makefile hat er mir garnichts erzählt - also muss das doch auch ohne gehen! *aufstampf*

Die hornerschema.h und auch die hornerschema.cpp werden vom Compiler durchwackelt, immerhin habe ich für beide ein "no new line at end of file" bekommen.

Ach ja: Ich verwende Kate, g++ und Ubuntu 7.04

Der eine oder andere Link wäre auch schon eine sehr große Hilfe.

Ich freue mich schon auf eure Antworten

MfG

isitreal

Geschrieben

Ich habe einen Texteditor, 3 Datein und einen Compiler. Ich kompiliere einfach die potenzfunktionen.cpp ("Hauptprogramm").

Hm - also nur 2 Möglichkeiten? IDE oder Makefile? *grummel* Kann mir jemand eine gute IDE für Linux empfehlen?

Obwohl - das Makefile ist zwar ge****e, hat aber sicher mehr Stil ... ach, ich weiß nicht was ich machen solll :(

Geschrieben
Ich habe einen Texteditor, 3 Datein und einen Compiler. Ich kompiliere einfach die potenzfunktionen.cpp ("Hauptprogramm").
Die andere(n) cpp-Datei(en) musst du natürlich auch kompilieren. Und die dabei erzeugten Objektdateien kannst du dann zusammenlinken.

Du musst weder ein Makefile noch eine IDE benutzen. Auf lange Sicht ist es aber mit Sicherheit einfacher.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...