2014-02-27 59 views
0

我開始學習CPP和我已經開始與AA簡單的程序:錯誤使用的argv與功能

#include <stdio.h> 
#include <vector> 
#include "functions.h" 
using namespace std; 

int main(int argc,char * argv[]){ 
    double start=0; 
    double end=0; 
    vector<double> fbseq; 

    getInput(argc,argv); 

return 0; 
} 

和functions.h,我有:

using namespace std; 
void getInput(int,char **); 

當我編譯和運行我得到:

g++ fibonacci.cpp -o fibonacci 
/tmp/ccZ1cCvi.o: In function `main': 
fibonacci.cpp:(.text+0x3d): undefined reference to `getInput(int, char**)' 

我真的不明白這是什麼意思,有人可以幫我,我可以看到這是有關我不理解指針?

感謝 丹

+1

你不應該把'使用命名空間std;'成一個頭文件... – Sean

+0

如果我不在編譯時出現以下錯誤:'g ++ fibonacci.cpp -o fibonacci 從fibonacci.cpp包含的文件中:3: functions.h:5:錯誤:未在此範圍內聲明'vector' 函數。 h:5:錯誤:期望的主表達式在012之前 ' – Dan

+0

你應該在標題中的std :: vector處引用它。 – Sean

回答

3

這是一個鏈接錯誤,這意味着代碼編譯罰款,但鏈接器找不到你使用的一切的定義。在這種情況下,這意味着您沒有在任何地方定義getInput。你需要給這個函數一個正文。通常情況下,你應該在相應的.cpp文件做到這一點:

#include "functions.h" 

void getInput(int argc, char** argv) { 
    // Implement here 
} 

當你有,你需要確保你編譯文件了。只需將其添加到g++命令。

1

問題不是關於指針,而是關於你只聲明瞭函數getInput並且它沒有在任何地方定義。

0

你只聲明瞭getInput函數(它是頭文件中的部分),但是你沒有在任何地方實際定義它(指定函數體)。

1

您的編譯命令似乎錯過了functions.cpp或實現getInput函數的其他文件。

P.S.你不應該寫「使用命名空間標準;」在頭文件中,這是一個不好的習慣。參見Item 59薩特和Alexandrescu的的「C++編程規範:101條規則,準則和最佳實踐」:

"Don’t write namespace usings in a header file or before an #include."