我创建了一些数学函数,这些函数将在main()中使用,并由多个主机类中的成员函数使用。我当时想让这些数学函数在全局范围内是最容易的,但是我不确定如何做到这一点。

我目前将所有功能都放在一个名为Rdraws.cpp的文件中,并将原型(prototype)保存在Rdraws.h中。即使使用了所有的#includesexterns,在main()的第一个函数调用中我也遇到了“找不到符号”编译器错误。

这是我所拥有的:

// Rdraws.cpp
#include <cstdlib>
using namespace std;
#include <cmath>

#include "Rdraws.h"
#include "rng.h"

extern RNG rgen // this is the PRNG used in the simulation; global scope

void rmultinom( double p_trans[], int numTrials, int numTrans, int numEachTrans[] )
{ // function 1 def
}

void rmultinom( const double p_trans[], const int numTrials, int numTrans, int numEachTrans[])
{ // function 2 def
}

int rbinom( int nTrials, double pLeaving )
{ // function 3 def
}

// Rdraws.h

#ifndef RDRAWS
#define RDRAWS

void rmultinom( double[], int, int, int[] );
void rmultinom( const double[], const int, int, int[] );
int rbinom( int, double );

#endif

// main.cpp
...
#include "Rdraws.h"
...

extern void rmultinom(double p_trans[], int numTrials, int numTrans, int numEachTrans[]);
extern void rmultinom(const double p_trans[], const int numTrials, int numTrans, int numEachTrans[]);
extern int rbinom( int n, double p );

RNG rgen; // global PRNG object created for simulation

int main() { ... }

我是编程新手。如果有一种非常聪明的方法可以做到这一点,我很想知道。

更新

我是个笨蛋,没有意识到我还没有在编译器中包含Rdraws.cpp。如海报所述,我也忘记了分号。

如果可以改进此处概述的方法,我仍然会提出建议。

最佳答案

您正在使用哪个编译器?您需要首先将所有源文件编译为目标文件,然后将所有目标文件链接在一起。

例:

g++ -c -Wall -O2 main.cpp
g++ -c -Wall -O2 Rdraws.cpp

然后获取可执行文件...
g++ -s main.o Rdraws.o

08-06 15:17