VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 774|回复: 6

急问:结构体作为全局变量在不同类中传递的问题,谢谢!!

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-3-4 20:30:01 | 显示全部楼层 |阅读模式
我在用VC做一个单文档的工程proj。
包含mainfrm.cpp;proj.cpp;projDoc.cpp;projView.cpp等文件。
在工程中包含了一个定义全局变量的头文件:"globlevariable.h"
在上面这个头文件中定义了结构体,并声明了相应的全局变量:
///
.....

struct g_sCtrldata
{
        struct g_sCtrldata* pNext;
        struct g_sCtrldata* head;
        double x;
        double y;
        double dy;
        double ddy;
}; //结构体定义
g_sCtrldata  * g_ContrldataHipA;//全局变量声明
.....
//
然后我在Mainfrm.cpp中include这个头文件,并且对全局变量* g_ContrldataHipA赋值。
Mainfrm.cpp:
///
#include "globlevariable.h"
g_ContrldataHipA=(g_sCtrldata*)malloc(sizeof(g_sCtrldata)*100);
.....
for (int i=0;i<100;i++)
{        (g_ContrldataHipA+i)->pNext=pI+1;
        (g_ContrldataHipA+i)->x=*(g_dOutX+i);
        (g_ContrldataHipA+i)->y=*(g_dOutY+i);
        (g_ContrldataHipA+i)->dy=*(g_dOutDY+i);
        (g_ContrldataHipA+i)->ddy=*(g_dOutDDY+i);
        (g_ContrldataHipA+i)->head=g_ContrldataHipA;
       
}
...
以上都很顺利。
但是当我希望用曲线显示g_ContrldataHipA数组中的值时,需要在projView.cpp中访问并修改。这时问题出来了:
使用g_ContrldataHipA,编译时提示错误,g_ContrldataHipA没有定义。
我用extern g_ContrldataHipA也不行。
但是globlevariable.h中其他的非结构体的全局变量就可以直接使用,比如双精度变量,整型变量等等。

后来想到在projView.cpp中加上#include "globlevariable.h"
但这时提示了几百个错误,因为"globlevariable.h"已经在main.obj中定义了。:error LNK2015: "struct g_sCtrldata * g_Contrldata" (?g_Contrldata@@3PAUg_sCtrldata@@A) already defined in MainFrm.obj

请高手来抱我解决一下这个问题,难道结构体在不同的类中作为全局变量传递不可以吗?

回复

使用道具 举报

0

主题

12

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-5-19 00:15:02 | 显示全部楼层
globlevariable.h改为:
struct g_sCtrldata
{
        struct g_sCtrldata* pNext;
        struct g_sCtrldata* head;
        double x;
        double y;
        double dy;
        double ddy;
}; //结构体定义
extern bg_sCtrldata  * g_ContrldataHipA;//全局变量声明

然后在projView.cpp中加上#include "globlevariable.h"
回复

使用道具 举报

0

主题

45

帖子

32.00

积分

新手上路

Rank: 1

积分
32.00
发表于 2020-5-19 07:15:01 | 显示全部楼层
extern g_sCtrldata  * g_ContrldataHipA;//全局变量声明
回复

使用道具 举报

0

主题

32

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-5-19 18:30:02 | 显示全部楼层
在 g_sCtrldata  * g_ContrldataHipA; 之前添加个 struct , 即
struct g_sCtrldata  * g_ContrldataHipA;

然后在别的文件中用的时候要:
extern struct g_sCtrldata  * g_ContrldataHipA;

或者你用 typedef 对结构体重定义一下.
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-5-31 20:30:01 | 显示全部楼层
在.h文件中定义结构,在相应的.cpp文件中用该结构定义变量;然后在用到该变量的地方#include .h 并用extern struct定义外部变量即可。

在StdAfx.h中:
struct g_sCtrldata
{
        struct g_sCtrldata* pNext;
        struct g_sCtrldata* head;
        double x;
        double y;
        double dy;
        double ddy;
}; //结构体定义
在StdAfx.cpp中
struct bg_sCtrldata  * g_ContrldataHipA;//全局变量声明

在要用到的.cpp文件中
#include "StdAfx.h"
extern struct bg_sCtrldata  * g_ContrldataHipA;


回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-6-2 20:30:02 | 显示全部楼层
感谢各位大虾的捧场与帮助。
另外问一下楼上,:
在StdAfx.cpp中  
struct  bg_sCtrldata    *  g_ContrldataHipA;//全局变量声明  
为什么会出现“bg_sCtrldata”?前面.h里定义的结构名称是“g_sCtrldata”阿,那个“b”是怎么来的??
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-6-14 15:00:01 | 显示全部楼层
是你问题中多打了一个b 我没注意直接拷上去了 应该是g_sCtrldata 呵呵
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表