C++ Funktion mit Header auslagern

Mo1k

Mitglied
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
Code:
#ifndef NEU_H_INCLUDED
#define NEU_H_INCLUDED

void test();

#endif // NEU_H_INCLUDED

neu.cpp
Code:
#include "neu.h"

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

main.cpp
Code:
#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
 
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.
 
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 ?
 
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ß
 
Viel kann man dem Bild auch nicht entnehmen.
Vielleicht hast du irgendwas unter Build options geändert?
 
so hab jetzt grad meinen projektordner gepackt, hoffe das funktioniert soweit.
 

Anhänge

  • uebung_1.rar
    10,9 KB · Aufrufe: 14
Die neu.cpp Datei ist laut Projektdefinition kein Build-Ziel.

Projekteigenschaften -> Build Targets : Build target files

Häkchen bei neu.cpp setzen.

Gruß
 
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:
C++:
#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.
 
Zurück