a.cpp,b.cpp同时incluce"c.h"的问题!急!!!
c.h如下:
#ifndef _GLOBAL_VAR_FUNC_H
#define _GLOBAL_VAR_FUNC_H
double a=2.0;
double T=1.0;
double r;
int M,N;
double Beginfun(double x);
#endif
由于a.cpp,b.cpp都要用到”c.h“中的变量或函数!
说以在a.cpp,b.cpp中都加了#include "c.h ",但是会有重复定义错误!
如果只在一个文件(如a.cpp中)加入,又会有b.cpp 中没有定义的错误!
怎么解决?请高手帮帮忙,谢谢!
[解决办法]
//c.h
#ifndef _GLOBAL_VAR_FUNC_H
#define _GLOBAL_VAR_FUNC_H
extern double a;
extern double T;
extern double r;
extern int M,N;
double Beginfun(double x);
#endif
//a.cpp
#include "a.h "
double a=2.0; //定义
double T=1.0;
double r;
int M,N;
..............
//b.cpp
#include "a.h "
// use a, T, r, M, N, 但不要定义它们
.................
[解决办法]
c.h如下:
#ifndef _GLOBAL_VAR_FUNC_H
#define _GLOBAL_VAR_FUNC_H
static double a=2.0;
static double T=1.0;
static double r;
static int M,N;
double Beginfun(double x);
#endif
[解决办法]
lightnut和akirya的写法都可以,但是定义的变量的作用域不同,lightnut定义的变量为全局变量,而akirya定义的变量的作用域为文件作用域
[解决办法]
你应该这样:
c.h如下:
#ifndef _GLOBAL_VAR_FUNC_H
#define _GLOBAL_VAR_FUNC_H
extern double a;
extern double T;
extern double r;
extern int M,N;
double Beginfun(double x);
#endif
添加一个
c.cpp如下:
#include "c.h "
double a=2.0;
double T=1.0;
double r;
int M,N;
你既然知道.h里面只能写函数的声明,那么也应该能理解.h里面也只能写全局变量的声明(extern)吧?