无法声明和识别全局函数
我已经创建了一些数学函数,这些函数将用于main()和多个主机类中的成员函数。我认为将这些数学函数作为全局范围是最容易的,但我不知道如何做到这一点。无法声明和识别全局函数
我目前把所有的函数放在一个名为Rdraws.cpp的文件中,其中的原型是Rdraws.h。即使使用了所有的#includes
和externs
,我在main()的第一个函数调用中也收到了“symbol not found”编译器错误。
这是我有:
// 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
Holy ...对不起,我在编译时没有包含Rdraws.cpp。 现在处理一个“Rdraws.cpp错误:'void'之前的预期初始化器。” – Sarah 2010-04-14 15:57:17
@Sarah:'extern RNG rgen'后面会出现缺失的分号^ – 2010-04-14 15:58:58
@Sarah:那是因为你在第一个'void'之前的一行中忽略了一个分号。由于它是一个变量声明,因此编译器正在寻找初始化程序或分号。 – 2010-04-14 15:59:53
几件事情:
我没有看到变量rgen
任何地方所定义。它在Rdraws.cpp
中被宣布为 ,但缺少 定义。- 要使用全局变量和 功能需要单独 编译(编译只是没有链接)
main.cpp
和Rdraws.cpp
到main.o
和Rdraws.o
,然后链接 他们获得最终的可执行文件。
梅。对于“编程相当新颖”的人来说,这看起来相当不错。 – 2010-04-14 16:08:23