c ++跨多个文件的全局变量

fen*_*rbb 12 c++ header global-variables

我有一些代码分布在三个文件中,我想使用第四个"gloabls"文件来存储一些物理常量,例如pi的值.这样可以避免重复定义pi = 4*atan(1.0).在探讨之后,我尝试过创建一个全局头文件:

/*globals.h*/
extern double g_pi;
Run Code Online (Sandbox Code Playgroud)

和一个全局cpp文件:

/*globals.cpp*/
#include "math.h"
#include "globals.h"
double g_pi = 4*atan(1.0);
Run Code Online (Sandbox Code Playgroud)

然后我将这些文件包含在我的主文件中:

/*mainFile.cpp*/
//Include math and other libraries 
#include globals.h"
int main() {
/*
....
*/
double x = 2*g_pi
/*
....
*/
}
Run Code Online (Sandbox Code Playgroud)

这给了我一个未定义的g_pi参考错误.我在Ubuntu上使用g ++编译器.希望它是一个简单的修复!非常感谢您的建议.如果需要更多细节,我很乐意为他们提供.

dra*_*hnr 16

你可以简单地使用include中的M_PI(还有其他常量).

编辑:您的设置是正确的.我得到了一个有效的例子:

globals.h

extern double g_tst;
Run Code Online (Sandbox Code Playgroud)

globals.cpp

#include "globals.h"
double g_tst = 4.0;
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include "globals.h"
#include <stdio.h>
#include <stdlib.h>

int main()
{
fprintf (stderr, "g_tst  = %lf \n", g_tst);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题出在您的构建系统中

维基百科


小智 6

我认为问题是你有#include gobals.h而不是#include globals.h.这将为您提供未定义的引用,因为它不插入globals.h.当C++预编译器找不到头文件时,它不会失败.相反,您在编译时会收到未定义的引用消息.