我正在用不同的功能做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 :(得分: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)
将p
和n
声明为extern
:
extern int p;
extern int n;
int X(int i, int k){
return p + (i-1)*(n-1) + (k-1);
}