2017-02-23 115 views
1

我有一個簡單的程序與我的main.cpp,一個頭文件func.h和另一個源文件func.cpp。我使用CLion 2016.3。我的編譯器是gcc。Clion未定義的函數參考

他們看起來像這樣:

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 

我的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}) 

如果我運行生成我得到以下錯誤:

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

我怎麼能解決這個問題?我搜索了其他類似的問題,並找到了一些解決方案,但他們沒有爲我工作,或者我不知道該怎麼做。其實我有一個C項目的問題,但問題是一樣的,我認爲解決方案將是相同的。
你能幫我嗎?
非常感謝。

+0

請將您的CMakeList.txt – arved

+0

您的main.cpp包含func.h嗎? – ditkin

+0

我在我的文章中編輯了信息。我現在將讀取由llnspectable發佈的線程。 Thx到目前爲止 – Tomahawk44

回答

3

確保你在你的主要

#include "func.h" 

inlude func.h,把func.cpp在Cmakelist.txt設置soruce

名單的來源明確這裏。這就是所有(.cpp,.c,.cc)一起編譯。如果源文件不在當前目錄中,那麼你必須指定源文件

set(SOURCE_FILES main.cpp func.cpp) 

您可以使用file(GLOB SOURCE_FILES *.cpp),如果你想在你的編譯自動添加文件的完整路徑。但請記住,強烈不鼓勵這種「伎倆」。

+0

好的,非常感謝。我以爲我已經嘗試過這些東西,特別是將func.cpp放在我的cmakelist.txt中,但是顯然我在^^之前做了一些錯誤。 現在,它的工作。謝謝! – Tomahawk44

+0

@ Tomahawk44不要忘記將所有源文件(.cpp或.c)放入設置源中。 –

+0

是的,我會這樣做。也在我的其他項目上工作。謝謝! – Tomahawk44