我已经创建了一些数学函数,这些函数将在main()和多个宿主类中的成员函数中使用。我认为将这些数学函数全局化是最容易的,但我不知道该怎么做。
我目前将所有函数放在一个名为Rdraws.cpp的文件中,原型在Rdraws.h中。即使使用了所有#includes
和externs
,我也会在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。正如一张海报所说,我也忘记了一个分号。
如果可以改进此处列出的方法,我仍然会感激建议。
答案 0 :(得分:2)
您使用的是哪种编译器?您需要首先将所有源文件编译为目标文件,然后将所有目标文件链接在一起。
示例:
g++ -c -Wall -O2 main.cpp
g++ -c -Wall -O2 Rdraws.cpp
然后获取可执行文件......
g++ -s main.o Rdraws.o
答案 1 :(得分:1)
少数事情:
rgen
任何地方定义它已被宣布
在Rdraws.cpp
但是
定义缺失。main.cpp
和Rdraws.cpp
进入。{
main.o
和Rdraws.o
然后链接
他们得到最终的可执行文件。答案 2 :(得分:0)
看起来Brian R. Bondy有你的answer。我只想指出你在main.cpp中不需要那些extern
函数声明。声明已经在您包含的Rdraws.h头文件中进行。