# C++ Funktion mit Header auslagern



## Mo1k (23. Februar 2012)

Hallo,

ich lerne c++ ( codeblocks und mingw jeweils neueste Version)  und bin gerade bei dem Kapitel Programmstrukturierung angekommen.
Ich möchte jetzt zb eine Funktion auslagern und wollte das so machen:

neu.h

```
#ifndef NEU_H_INCLUDED
#define NEU_H_INCLUDED

void test();

#endif // NEU_H_INCLUDED
```

neu.cpp

```
#include "neu.h"

void test()
{
    cout << "Test" << endl;
}
```

main.cpp

```
#include <iostream>
#include "neu.h"
using namespace std;

int main() {
    
    test(); // hier kommt der fehler
    
}
```

Beim kompilieren kommt dann in der main.cpp ein Fehler : undefined reference to 'test()'

wies nicht wo der Fehler liegt, kann mir jemand helfen ?

Mo1k


----------



## ComFreek (23. Februar 2012)

Du musst neu.cpp auch zum Projekt hinzufügen.

Dann kann der Linker (deshalb Linker-Fehler) alle Referenzen finden und für dich eine ausführbare Datei erstellen.


----------



## Mo1k (23. Februar 2012)

die Dateien befinden sich im Projekt:
Workspace
 - uebung_1
   -Sources
      main.cpp
      neu.cpp
   -Headers
       neu.h

allerdings fällt mir gerade auf dass das headerfile in dem von mir oben gelisteten Baum nicht wie main.cpp und neu.cpp schwarz sondern grau ist, ist das normal ?


----------



## deepthroat (23. Februar 2012)

Hi.

Bitte erstelle das Projekt nochmal neu und kopiere die Ausgabe des Buildvorgangs hier rein.

Oder lad das bereinigte Projekt als zip hier hoch.

Gruß


----------



## Mo1k (23. Februar 2012)

hab mal ein Bild davon gemacht, falls das nichts hilft lad ich meinen gazen Projektordner hoch
http://imageshack.us/f/600/codeblocksz.png/


----------



## ComFreek (23. Februar 2012)

Viel kann man dem Bild auch nicht entnehmen.
Vielleicht hast du irgendwas unter Build options geändert?


----------



## Mo1k (23. Februar 2012)

so hab jetzt grad meinen projektordner gepackt, hoffe das funktioniert soweit.


----------



## deepthroat (23. Februar 2012)

Die neu.cpp Datei ist laut Projektdefinition kein Build-Ziel.

Projekteigenschaften -> Build Targets : Build target files 

Häkchen bei neu.cpp setzen.

Gruß


----------



## ComFreek (23. Februar 2012)

Alles klar!

Du hast zwar _neu.cpp_ dem Projekt hinzugefügt, aber nicht den beiden _Build targets_*.
Du kannst sie zu denen hinzufügen, indem du unter Project->Properties->Build targets jeweils unter Build target files neu.cpp auch noch aktivierst!

Wenn du jetzt kompilierst, wirst du zwei Fehlermeldungen bekommen, da du <iostream> nicht in neu.cpp eingebunden hast und cout nicht im globalen Namensraum existiert.
Ändere mal neu.cpp so ab:

```
#include "neu.h"
#include <iostream>

// Kannst du auch weglassen, dann aber std::cout!
using namespace std;

void test()
{
    cout << "Test" << endl;
}
```


*) Wenn man Dateien dem Projekt hinzufügt, kommt normalerweise eine Meldung mit der Frage, ob man diese Dateien auch den _Build targets_ hinzufügen möchte.


----------

