关于定义全局结构体的问题
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
麻烦各位帮我看一下是什么问题。