C++ Header erstellen... PROBLEME

991jo

Freizeitschrauber(in)
Hallo

ich stehe vor dem Problem, dass ich für meinen Informatik-Seminarkurs ein Spiel coden muss. Jetzt steh ich vor dem Problem, dass ich mich in Zukunft vor mehreren 1000 Zeilen Code stehen sehe, die ich nicht alle in eine Datei packen will. Also: Header-Dateien erstellen. Hab ich auch gleich mal probiert, sieht dann so aus:

Code:
#ifndef BLOCKFUNCTIONS_H
#define BLOCKFUNCTIONS_H
void block(int x, int y, int z){
               glPushMatrix();
               glTranslatef(x-9,y-9,0);                
               glTranslatef(-0.5,-0.5,0);
               glutSolidCube(1);
               glPopMatrix();
}
#endif
(hier handelt es sich um GLUT/OpenGL-Befehle, also nicht wundern.
die Datei ist in Dev-Cpp (wenn mir einer sagen will, dass Dev-Cpp nicht mehr geupdatet wird und ******* ist, der hat Recht, aber ich bin in der Schule, da geht manchmal einfach nicht die Vernunft vor. Der Lehrer muss sich damit ja nicht rumschlagen :P) auch erstellt worden, steht gleich unter meinem restlichen Code im Projekts-Baum und heißt blockfunctions.h.
so ist sie in der main.cpp auch eingebunden:

Code:
#include <blockfunctions.h>

Leider bekomme ich immer den Compiler-Fehler

7 K:\versuch 1\rollo\main.cpp blockfunctions.h: No such file or directory.

Die Datei blockfunctions.h befindet sich in genau dem selben Ordner, wie auch die main.cpp und auch die compilierte .exe.
Wo liegt das Problem? Ich habe an diversen Stellen gelesen, dass man eine Object-Datei erstellen müsste und die irgendwo verlinken. So eine wirklich genaue Erklärung, wofür man die braucht und wie man die erstellt, hab ich aber nirgends gefunden.
 
Eigene Header bindest du in der Regel mit
Code:
#include "meinheader.h"
ein. Das hat Einfluss auf die Reihenfolge, WIE die Include-Files gesucht werden (und auch WO). Hängt aber auch vom Compiler ab. In der Regel ist das so, dass <...> z. B. in den System-Verzeichnissen sucht, während "..." im lokalen Projekt sein Glück versucht.

Abgesehen davon kannst du so keine Funktion im Header schreiben. Du musst entweder ein inline in den Funktionskopf packen oder die Funktion in eine eigene .c Datei auslagern:
Code:
Variante A:

#ifndef _BLUBB_
#define _BLUBB_

inline void foo(...)
{
    ...
}

#endif


Variante B:

(header.h)
#ifndef _BLUBB_
#define _BLUBB_

void foo();

#endif



(header.c)
#include "header.h"

void foo()
{
    ...
}



(gilt für beide - other.c)
#include "header.h"

void bar()
{
    /* Aufruf */
    foo();
}
So wie du das gemacht hast, wirst du einen Fehler erhalten, sobald du die Datei in mehr als einer anderen Datei einbindest (Mehrfachdefinition einer Funktion ist nicht erlaubt). Ich rate dir in den meisten Fällen zu Variante B. Das inline Keyword sollte nur da verwendet werden, wo es Sinn macht, und selbst da hat der Compiler bis zum Schluss das Sagen.
 
Zuletzt bearbeitet:
inline hieß, dass der funktionsrumpf an die stelle des funktionsaufrufs kopiert wird oder? also
inline void myPrint(string str) { cout << "ausgabe: " << str << endl;}
myPrint("Hallo Welt!");

wird zu
cout << "ausgabe: " << "Hallo Welt!" << endl;

irgendwie so ^^
 
Ja, wobei das eher als Hinweis für den Compiler zu verstehen ist. Ob der das dann auch wirklich so umsetzt, steht auf einem anderen Blatt. Es macht auch nur bei sehr kleinen Funktionen, die nur aus ein paar Zeilen Code bestehen, wirklich Sinn.
 
okay, danke, den Header mit "" einzubinden hat das Problem gelöst, wenn sich weitere Probleme auftun, dann werd ich mich mal an die Methode mit der .c-Datei machen.
 
Zurück