2017-02-23 7 views
1

Ich habe ein einfaches Programm mit meinem main.cpp, eine Header-Datei func.h und eine andere Quelldatei func.cpp. Ich benutze CLion 2016.3. Mein Compiler ist gcc.Clion undefined Verweis auf Funktion

Sie sehen wie folgt aus:

Main.cpp

#include <iostream> 
#include <stdlib.h> 
#include <cstdio> 
#include "func.h" 

int main() { 

int c; 
c = number(2); 
printf("%i", c); 

} 

func.cpp

int number(int a){ 

return a; 

} 

func.h

#ifndef TEST2_FUNC_H 
#define TEST2_FUNC_H 

int number(int a); 

#endif //TEST2_FUNC_H 

Mein CMakeLists.txt

cmake_minimum_required(VERSION 3.6) 
project(test2) 

set(CMAKE_CXX_STANDARD 11) 

set(SOURCE_FILES main.cpp) 
add_executable(test2 ${SOURCE_FILES}) 

Wenn ich laufe den Build ich die folgende Fehlermeldung erhalten:

CMakeFiles\test2.dir/objects.a(main.cpp.obj): In function `main': 
C:/Users/name/ClionProjects/test2/main.cpp:8: undefined reference to `number(int)' 
.... 

Wie kann ich dieses Problem beheben? Ich habe nach anderen ähnlichen Problemen gesucht und einige Lösungen gefunden, aber sie funktionierten nicht für mich oder ich wusste nicht, was ich tun sollte. Eigentlich habe ich dieses Problem mit einem C-Projekt, aber das Problem ist das gleiche und ich denke, die Lösung wird die gleiche sein.
Können Sie mir bitte helfen?
Vielen Dank.

+0

Bitte posten Sie Ihre CMakeList.txt – arved

+0

Enthält Ihre main.cpp func.h? – ditkin

+0

Ich habe die Infos in meinem Beitrag bearbeitet. Ich werde jetzt den von lnnspectable geposteten Thread lesen. Thx so weit – Tomahawk44

Antwort

3

Stellen Sie sicher, func.h in der Haupt

#include "func.h" 

inlude und legte die func.cpp in Cmakelist.txt soruce gesetzt

Liste die hier explizit Quellen. Das ist alles (.cpp, .c, .cc) zusammen zu kompilieren. Wenn die Quellen-Dateien nicht im aktuellen Verzeichnis sind, dann müssen Sie den vollständigen Pfad zu den Quelldateien angeben

set(SOURCE_FILES main.cpp func.cpp) 

können Sie file(GLOB SOURCE_FILES *.cpp) verwenden, wenn Sie die Dateien automatisch in Ihrer Zusammenstellung hinzufügen wollen. Aber denken Sie daran, dass dieser "Trick" nicht unbedingt zu tun ist.

+0

Ok, vielen Dank. Ich dachte, ich hätte diese Dinge ausprobiert, vor allem, indem ich die func.cpp in meine cmakelist.txt gesteckt habe, aber anscheinend habe ich vor ^^ etwas falsch gemacht. Jetzt funktioniert es. Vielen Dank! – Tomahawk44

+0

@ Tomahawk44 Vergessen Sie nicht, alle Quelldateien (.cpp oder .c) in die Quelle zu setzen. –

+0

Ja, ich werde das tun. Arbeitete auch an meinem anderen Projekt. Vielen Dank! – Tomahawk44