在c++错误中从不同的文件调用函数。

时间:2022-01-29 16:01:59

I would like to use one function from Stats.cpp in Application.cpp. Here are my code snippets:

我想从统计数据中使用一个函数。在Application.cpp cpp。下面是我的代码片段:

In Stats.h:

在Stats.h:

#ifndef STATS_H
#define STATS_H

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

#endif

In Stats.cpp:

在Stats.cpp:

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

In Application.cpp:

在Application.cpp:

int main()
{
    generateStat(10);
}

I get an "unresolved external symbol" error however I don't know what I else I would need to include in order for Application.cpp. Any thoughts?

我得到了一个“未解决的外部符号”错误,但是我不知道我还需要包括哪些内容以便应用。任何想法吗?

3 个解决方案

#1


2  

In Stats.cpp

在Stats.cpp

you need to define generateStat like following :

您需要像以下那样定义generateStat:

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

Then create object of class Stats, use it to call the public member function generateStat

然后创建类属性的对象,使用它调用公共成员函数generateStat。

Stats s;
s.generateStat( 10 ) ;

Build the application using :

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

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

g++ - o统计数据。cpp应用程序。cpp - i。

#2


0  

generateStat is part of your Stats class. You need to instantiate a Stats object (along with the necessary includes for Stats.h in your main class)

generateStat是您的Stats类的一部分。您需要实例化一个Stats对象(同时还需要包括统计数据)。h在你的主课上)

For example,

例如,

Stats stat;
stat.generateStat(i);

Also, your function definition needs to include the class name Stats::generateStat.

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

#3


0  

The same error msg occured 2 weeks ago (at work).

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

At first glance --- Try:

乍一看---试试:

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

The class name was missing. Hence, unresolved.

这个类名不见了。因此,没有解决。

btw Concerning your header --- another issue, this #ifndef directive should not be necessary cause you should declare Stats only once in a namespace.

关于您的头——另一个问题,这个#ifndef指令不应该是必要的,因为您应该只在名称空间中声明一次统计信息。

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

This is a generic example - Usable in cpp files.

这是一个通用的例子,可以在cpp文件中使用。

EDIT: Now, I saw your invocation (main method in your case). You need an object instance to invoke your method.

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

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);

In your header:

在你的头:

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

#1


2  

In Stats.cpp

在Stats.cpp

you need to define generateStat like following :

您需要像以下那样定义generateStat:

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

Then create object of class Stats, use it to call the public member function generateStat

然后创建类属性的对象,使用它调用公共成员函数generateStat。

Stats s;
s.generateStat( 10 ) ;

Build the application using :

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

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

g++ - o统计数据。cpp应用程序。cpp - i。

#2


0  

generateStat is part of your Stats class. You need to instantiate a Stats object (along with the necessary includes for Stats.h in your main class)

generateStat是您的Stats类的一部分。您需要实例化一个Stats对象(同时还需要包括统计数据)。h在你的主课上)

For example,

例如,

Stats stat;
stat.generateStat(i);

Also, your function definition needs to include the class name Stats::generateStat.

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

#3


0  

The same error msg occured 2 weeks ago (at work).

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

At first glance --- Try:

乍一看---试试:

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

The class name was missing. Hence, unresolved.

这个类名不见了。因此,没有解决。

btw Concerning your header --- another issue, this #ifndef directive should not be necessary cause you should declare Stats only once in a namespace.

关于您的头——另一个问题,这个#ifndef指令不应该是必要的,因为您应该只在名称空间中声明一次统计信息。

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

This is a generic example - Usable in cpp files.

这是一个通用的例子,可以在cpp文件中使用。

EDIT: Now, I saw your invocation (main method in your case). You need an object instance to invoke your method.

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

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);

In your header:

在你的头:

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