在C ++错误中调用来自不同文件的函数

时间:2014-03-26 20:10:46

标签: c++

我想在Application.cpp中使用Stats.cpp中的一个函数。这是我的代码片段:

在Stats.h中:

#ifndef STATS_H
#define STATS_H

class Stats
{
public:
    void generateStat(int i);
};

#endif

在Stats.cpp中:

#include Stats.h
void generateStat(int i)
{
    //some process code here
}

在Application.cpp中:

int main()
{
    generateStat(10);
}

我得到一个"未解析的外部符号"然而,我不知道我还需要包含什么才能包含Application.cpp。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

Stats.cpp

您需要定义generateStat,如下所示:

#include Stats.h
void Stats:: generateStat(int i) // Notice the syntax, use of :: operator
{
    //some process code here
}

然后创建类Stats的对象,用它来调用公共成员函数generateStat

Stats s;
s.generateStat( 10 ) ;

使用以下方式构建应用程序:

g++ -o stats Stats.cpp Application.cpp -I.

答案 1 :(得分:0)

generateStat是您Stats课程的一部分。您需要实例化Stats对象(以及Stats.h类中main的必要包含)

例如,

Stats stat;
stat.generateStat(i);

此外,您的函数定义需要包含类名Stats::generateStat

答案 2 :(得分:0)

同样的错误信息发生在2周前(在工作中)。

乍一看---试试:

 void Stats::generateStat(int i) {
     //some process code here }

缺少班级名称。因此,未解决

btw关于你的标题---另一个问题,这个#ifndef指令不应该是必要的,因为你应该只在命名空间中声明一次Stats。

#ifndef CLASS_H
#define CLASS_H
#include "Class.h"
#endif

这是一个通用示例 - 可用于cpp文件。

编辑:现在,我看到了您的调用(您的主要方法)。您需要一个对象实例来调用您的方法。

Stats* stats = new Stats(); //add a default constructor if not done
stats->generateStat(77);

// any other stats stuff ......
// in posterior to the last use
delete(stats);

在标题中:

Stats::Stats(){}; //with an empty body - no need to write it again in the cpp file