在一个.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>
上面加#include<a.h>
#2
???
这里好像是C# 论坛。。。
如果想用全局变量的话,定义个静态类就行了。只要在一个命名空间下,都能引用的到。
这里好像是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]'
我应该怎么办??
我已经试过了在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];
……
};
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关键字怎么用的,似乎跟你的问题有关,我也不太清楚了,嘿嘿
不要在.h里定义变量,不然一定有多个#include就会报错的
再查查extern关键字怎么用的,似乎跟你的问题有关,我也不太清楚了,嘿嘿
#14
就是这样的,不要在.h文件定义变量
#15
用#pragma once
ifndef __YOUR_H__
#define __YOUR_H__
//你的代码部分
#endif
//如果出现头文件多次包含的错误话,就把变量定义为static的就可以了.
ifndef __YOUR_H__
#define __YOUR_H__
//你的代码部分
#endif
//如果出现头文件多次包含的错误话,就把变量定义为static的就可以了.
#16
这样做是不对的。
#17
1.不在用变量作为数组的大小的下标
2.在.h文件不要定义变量,只是进行申明变量用extern
2.在.h文件不要定义变量,只是进行申明变量用extern
#18
1. A.h 里int a[3]={5,8,10};应该不会是定义在类外的吧?
定义应该在cpp里。
2.需要用的变量extern 到 .h里面 ,在要用的文件里包含这个.h就行了(.h记得加编译保护)
定义应该在cpp里。
2.需要用的变量extern 到 .h里面 ,在要用的文件里包含这个.h就行了(.h记得加编译保护)
#19
需要用哪个文件中的变量,就在哪个文件中提供get函数,通过函数去访问变量
#20
谢谢各位的热心帮助,使用了各位的方法似乎还是不很奏效,不过我也学到不少东西,现在就结贴了吧
谢谢~~~
谢谢~~~
#21
...
#1
.h文件是c++的后缀吧
上面加#include<a.h>
上面加#include<a.h>
#2
???
这里好像是C# 论坛。。。
如果想用全局变量的话,定义个静态类就行了。只要在一个命名空间下,都能引用的到。
这里好像是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]'
我应该怎么办??
我已经试过了在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];
……
};
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关键字怎么用的,似乎跟你的问题有关,我也不太清楚了,嘿嘿
不要在.h里定义变量,不然一定有多个#include就会报错的
再查查extern关键字怎么用的,似乎跟你的问题有关,我也不太清楚了,嘿嘿
#14
就是这样的,不要在.h文件定义变量
#15
用#pragma once
ifndef __YOUR_H__
#define __YOUR_H__
//你的代码部分
#endif
//如果出现头文件多次包含的错误话,就把变量定义为static的就可以了.
ifndef __YOUR_H__
#define __YOUR_H__
//你的代码部分
#endif
//如果出现头文件多次包含的错误话,就把变量定义为static的就可以了.
#16
这样做是不对的。
#17
1.不在用变量作为数组的大小的下标
2.在.h文件不要定义变量,只是进行申明变量用extern
2.在.h文件不要定义变量,只是进行申明变量用extern
#18
1. A.h 里int a[3]={5,8,10};应该不会是定义在类外的吧?
定义应该在cpp里。
2.需要用的变量extern 到 .h里面 ,在要用的文件里包含这个.h就行了(.h记得加编译保护)
定义应该在cpp里。
2.需要用的变量extern 到 .h里面 ,在要用的文件里包含这个.h就行了(.h记得加编译保护)
#19
需要用哪个文件中的变量,就在哪个文件中提供get函数,通过函数去访问变量
#20
谢谢各位的热心帮助,使用了各位的方法似乎还是不很奏效,不过我也学到不少东西,现在就结贴了吧
谢谢~~~
谢谢~~~
#21
...