2013-05-17 39 views
0

我正在使用不同函数的C++。我想把这个函数放在不同的源文件中。 做我创建了一个头文件: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函数将不再起作用。

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

回答

0

function.cpp,声明全局变量

extern int p, n, m; 

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

+0

您的链接与'extern'的用法无关,用于声明在不同翻译单元中定义的变量。 – Oswald

+0

@Oswald实际上不是我的编辑。 –

3

在你function.cpp,声明变量

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

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

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

0

申报pnextern

extern int p; 
extern int n; 

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

我试图做到这一点,但我的主要仍然有错误像p和n未申报:( – usertfwr

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等。