C ++函数在具有全局变量的不同源文件中

时间:2013-05-17 09:33:47

标签: c++ function variables

我正在用不同的功能做c ++。我想把函数放在不同的源文件中。 我要创建一个头文件:

function.h

int X(int i, int k);

以及具有以下功能的文件:

function.cpp

int X(int i, int k){    
return p + (i-1)*(n-1) + (k-1);
}

我有我的主要内容:

#include "subfunction.h"
int p, n, m, num_entries, NUMROWS;

int main (int argc, char **argv){

int project = 4;
int employee = 5; 
int time = 5; 
p=project;
n=employee;
m=time;

num_entries=-1;
int row=-1;
M[num_entries].col=X(i,k); 
}

我没有把我所有的主要内容,只是有趣的部分。我的问题是n,m和p是我主要的全局变量,但我也在我的函数中使用它们。 如果我在函数中声明它,那么main将不再起作用,如果我在main中声明它也是如此。

我如何使用全局变量来做到这一点? 感谢

4 个答案:

答案 0 :(得分:3)

function.cpp中,将变量声明为

extern int p, n; // your function doesn't seem to need "m"

这指示编译器将在其他模块中定义变量;在链接时,您必须将其他模块与功能代码一起包含在内,否则链接器会抱怨未解析的外部。

但是,使用这样的全局变量不是编写代码的好方法。重构你的代码,使它们成为函数参数。

答案 1 :(得分:1)

  

我如何使用全局变量?

最好的办法是将全局变量显式传递给函数。全局变量是一种维护责任,没有它们,您的代码将更容易理解。

例如,您可以这样做:

int X(int i, int k, int n, int p);

如果您需要修改全局变量的能力,请通过引用传递它们:

int X(int i, int k, int& n, int& p) {
    p += 24;
    n = 42;
    ...
}

如果您的全局变量实际上是常量,声明它们const并将它们放在标题中应该可以解决问题:

const int n = 42;

如果由于某种原因你不能这样做,请在必须引用它们的模块中声明全局变量extern int p等。

答案 2 :(得分:0)

function.cpp中,将全局变量声明为

extern int p, n, m;

所以编译器知道它在其他地方定义。我同意上面的答案,使用像这样的全局变量被认为是不好的形式,应该重构。

答案 3 :(得分:0)

pn声明为extern

extern int p;
extern int n;

int X(int i, int k){    
  return p + (i-1)*(n-1) + (k-1);
}