2014-02-27 35 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."