在一个.h文件中调用另外一个.h文件中定义的变量应该怎么做呢?(菜鸟提问)

时间:2022-09-30 23:10:30
请各位帮帮,谢谢!!
在一个.h文件中调用另外一个.h文件中定义的变量应该怎么做呢?
//A.h 
……
int a[3]={5,8,10};
……


//B.h
struct B{
……
float b[x][y];
……
};


上面就是两个.h文件,A.h中定义了一个三维数组,B,h中定义了一个结构体。
我想实现的目标是在B.h的结构体中的那个数组的维数,x=5; y=8;(与A.h中的三维数组保持一致,方便我以后更改这组程序时只要更改A.h就可以了,不需要每次更改程序都要更改两个.h文件)。
这样的目标可以实现么?如果可以我应该怎么更改这个程序呢?

21 个解决方案

#1


.h文件是c++的后缀吧
上面加#include<a.h>

#2


???
这里好像是C# 论坛。。。
如果想用全局变量的话,定义个静态类就行了。只要在一个命名空间下,都能引用的到。

#3


和。c一样的 直接include就好

#4


不好意思,刚来没看清,我转一下

#5


问题补充:
我已经试过了在B.h加上#include  A.h
并且
//B.h 
struct B{ 
…… 
float b[x][y];  ------------> float b[a[0]][70];
…… 
}; 

但是编译时提示错误, error: data member may not have variably modified type `float[((unsigned int)((int)a[0]))][70]'
我应该怎么办??

#6


up

#7


把要调用的.h用include <a.h>就可以了啊

#8


//A.h
extern int a[3];
……

//A.cpp
int a[ 3 ] ={5,8,10};

//B.h
struct B{
……
float b[x][y];
……
}; 

#9


include"..."

#10


首先 你不能用变量去定义数组的。然后 你完全可以在 a.h中定义宏来解决这个问题

#11


除了类,不要在头文件了定义东西。

#12


就算你#include了,链接的时候还是可能会有问题。

#13


你可以在一个.h头文件里定用#define或const关键字定义常量
不要在.h里定义变量,不然一定有多个#include就会报错的
再查查extern关键字怎么用的,似乎跟你的问题有关,我也不太清楚了,嘿嘿

#14


引用 11 楼 dskit 的回复:
除了类,不要在头文件了定义东西。

就是这样的,不要在.h文件定义变量

#15


用#pragma once
ifndef __YOUR_H__
#define __YOUR_H__
//你的代码部分


#endif
//如果出现头文件多次包含的错误话,就把变量定义为static的就可以了.

#16


引用 15 楼 tony_chenypc 的回复:
用#pragma once
 ifndef __YOUR_H__
 #define __YOUR_H__
 //你的代码部分


 #endif
 //如果出现头文件多次包含的错误话,就把变量定义为static的就可以了.

这样做是不对的。

#17


1.不在用变量作为数组的大小的下标
2.在.h文件不要定义变量,只是进行申明变量用extern 

#18


1. A.h 里int a[3]={5,8,10};应该不会是定义在类外的吧?
定义应该在cpp里。
2.需要用的变量extern 到 .h里面 ,在要用的文件里包含这个.h就行了(.h记得加编译保护)

#19


需要用哪个文件中的变量,就在哪个文件中提供get函数,通过函数去访问变量

#20


谢谢各位的热心帮助,使用了各位的方法似乎还是不很奏效,不过我也学到不少东西,现在就结贴了吧
  谢谢~~~

#21


...

#1


.h文件是c++的后缀吧
上面加#include<a.h>

#2


???
这里好像是C# 论坛。。。
如果想用全局变量的话,定义个静态类就行了。只要在一个命名空间下,都能引用的到。

#3


和。c一样的 直接include就好

#4


不好意思,刚来没看清,我转一下

#5


问题补充:
我已经试过了在B.h加上#include  A.h
并且
//B.h 
struct B{ 
…… 
float b[x][y];  ------------> float b[a[0]][70];
…… 
}; 

但是编译时提示错误, error: data member may not have variably modified type `float[((unsigned int)((int)a[0]))][70]'
我应该怎么办??

#6


up

#7


把要调用的.h用include <a.h>就可以了啊

#8


//A.h
extern int a[3];
……

//A.cpp
int a[ 3 ] ={5,8,10};

//B.h
struct B{
……
float b[x][y];
……
}; 

#9


include"..."

#10


首先 你不能用变量去定义数组的。然后 你完全可以在 a.h中定义宏来解决这个问题

#11


除了类,不要在头文件了定义东西。

#12


就算你#include了,链接的时候还是可能会有问题。

#13


你可以在一个.h头文件里定用#define或const关键字定义常量
不要在.h里定义变量,不然一定有多个#include就会报错的
再查查extern关键字怎么用的,似乎跟你的问题有关,我也不太清楚了,嘿嘿

#14


引用 11 楼 dskit 的回复:
除了类,不要在头文件了定义东西。

就是这样的,不要在.h文件定义变量

#15


用#pragma once
ifndef __YOUR_H__
#define __YOUR_H__
//你的代码部分


#endif
//如果出现头文件多次包含的错误话,就把变量定义为static的就可以了.

#16


引用 15 楼 tony_chenypc 的回复:
用#pragma once
 ifndef __YOUR_H__
 #define __YOUR_H__
 //你的代码部分


 #endif
 //如果出现头文件多次包含的错误话,就把变量定义为static的就可以了.

这样做是不对的。

#17


1.不在用变量作为数组的大小的下标
2.在.h文件不要定义变量,只是进行申明变量用extern 

#18


1. A.h 里int a[3]={5,8,10};应该不会是定义在类外的吧?
定义应该在cpp里。
2.需要用的变量extern 到 .h里面 ,在要用的文件里包含这个.h就行了(.h记得加编译保护)

#19


需要用哪个文件中的变量,就在哪个文件中提供get函数,通过函数去访问变量

#20


谢谢各位的热心帮助,使用了各位的方法似乎还是不很奏效,不过我也学到不少东西,现在就结贴了吧
  谢谢~~~

#21


...