关于定义全局结构体的问题

dvlinker
C/C++领域优质创作者
博客专家认证
2007-10-19 11:09:35
我在工程中添加了global.h和global.cpp两个文件,用于声明和定义全局变量。用这种方式定义一般的全局变量(例如BOOL StartFlag)在使用时都是没问题的,但是定义全局结构体时却出现了问题。

问题描述如下:
(1)在 global.h 声明了名为ThreadInfo的结构体,并且声明了全局函数ThreadProc(),在该函数中用到了全局结构体,它们的声明如下:
extern struct ThreadInfo
{
CDialog *pDialog;
CProgressCtrl *pProgress;
};
extern UINT ThreadProc(LPVOID pParam);//全局函数
(2)在 global.cpp中实现上面声明的全局函数:
UINT ThreadProc(LPVOID pParam)
{
ThreadInfo *pInfo=(ThreadInfo *)pParam;//该处使用到了上面的全局结构体ThreadInfo
BOOL bKeepRuning=TRUE;
while(bKeepRuning)
{
if(WaitForSingleObject(eventBegin.m_hObject,0)==WAIT_OBJECT_0)
{
for(int i=0;i<100;i++)
{
pInfo->pProgress->SetPos(i);
if(WaitForSingleObject(eventKill.m_hObject,0)==WAIT_OBJECT_0)
{
bKeepRuning=FALSE;
break;
}
if(WaitForSingleObject(eventStop.m_hObject,0)==WAIT_OBJECT_0)
break;
Sleep(100);
}
pInfo->pProgress->SetPos(0);
// CClyxcDlg *pThreadDlg=(CClyxcDlg *)pInfo->pDialog;
BeginFlag=FALSE;
StopFlag=FALSE;
}
if(WaitForSingleObject(eventKill.m_hObject,0)==WAIT_OBJECT_0)
bKeepRuning=FALSE;
}
::PostMessage(pInfo->pDialog->GetSafeHwnd(),WM_USER_ENDED,0,0);

return 0;
}
(3)程序编译后显示如下的错误:
E:\My VCProjects\clyxc\global.cpp(12) : error C2065: 'ThreadInfo' : undeclared identifier
E:\My VCProjects\clyxc\global.cpp(12) : error C2065: 'pInfo' : undeclared identifier
E:\My VCProjects\clyxc\global.cpp(12) : error C2059: syntax error : ')'
E:\My VCProjects\clyxc\global.cpp(20) : error C2227: left of '->pProgress' must point to class/struct/union
E:\My VCProjects\clyxc\global.cpp(20) : error C2227: left of '->SetPos' must point to class/struct/union
E:\My VCProjects\clyxc\global.cpp(30) : error C2227: left of '->pProgress' must point to class/struct/union
E:\My VCProjects\clyxc\global.cpp(30) : error C2227: left of '->SetPos' must point to class/struct/union
E:\My VCProjects\clyxc\global.cpp(38) : error C2227: left of '->pDialog' must point to class/struct/union
E:\My VCProjects\clyxc\global.cpp(38) : error C2227: left of '->GetSafeHwnd' must point to class/struct/union

麻烦各位帮我看一下是什么问题。
...全文
1133 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dvlinker 2007-11-23
  • 打赏
  • 举报
回复
现在弄明白了,在global.h头文件中定义结构体即可,无需加extern关键字例如
typedef union
{
BYTE B[4];
float L;
}DataTransUnion;
凤矶 2007-10-19
  • 打赏
  • 举报
回复
global.cpp中 #include"global.h"
这句有没有?
wjkgz 2007-10-19
  • 打赏
  • 举报
回复
不要忘记在cpp中 #include "global.h"
dvlinker 2007-10-19
  • 打赏
  • 举报
回复
还是不行,主要是如何定义全局结构体问题
凤矶 2007-10-19
  • 打赏
  • 举报
回复
typedef struct _ThreadInfo
{
CDialog *pDialog;
CProgressCtrl *pProgress;
}ThreadInfo;
dvlinker 2007-10-19
  • 打赏
  • 举报
回复
去掉extern后还是会出现同样的问题
ouyh12345 2007-10-19
  • 打赏
  • 举报
回复
extern struct ThreadInfo
{
CDialog *pDialog;
CProgressCtrl *pProgress;
};
把extern去掉。
alwaysrun 2007-10-19
  • 打赏
  • 举报
回复
在cpp中定义,在h中声明一下
point_ak47 2007-10-19
  • 打赏
  • 举报
回复
up...
凤矶 2007-10-19
  • 打赏
  • 举报
回复
global.cpp中要加 #include"global.h"
dvlinker 2007-10-19
  • 打赏
  • 举报
回复
我在global.cpp中加了#include "stdafx.h",并且在工程头文件中加了#include "global.h",这样就可以在任何地方使用定义的全局变量了,之前我也编了一个demo试了一下,这样做是行的通的,避免了多处要包含#include "global.h"。但是这种做法对全局结构体怎么实现呢?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧