WorkManage.h里面定义了如下的东西:
struct EmployeeInfo {
CString starttime;
CString workstylename;
};EmployeeInfo* GetWorkStyleInfo(CString id);WorkManage.cpp的相关函数如下;
void CWorkManage::OnSelchangeListemployeework()
{
CString str;
int index = m_employeework.GetCurSel();
if(index != -1){
CString id = m_employeework.GetText(index, str);
EmployeeInfo* m_EmployeeInfo = GetWorkStyleInfo(id);
}
}EmployeeInfo* CWorkManage::GetWorkStyleInfo(CString idstr)
{
UpdateData(true);
......
......
workstylename = vartostr( pRecordset->GetCollect(_variant_t("workstylename")));
starttime = vartostr( pRecordset->GetCollect(_variant_t("teamstarttime"))); // EmployeeInfo* m_EmployeeInfo;
m_EmployeeInfo->starttime = starttime;
m_EmployeeInfo->workstylename = workstylename;
return EmployeeInfo;
}
可是出现6个错误,大家帮忙看一下,我看了一下午,晕了:(
struct EmployeeInfo {
CString starttime;
CString workstylename;
};EmployeeInfo* GetWorkStyleInfo(CString id);WorkManage.cpp的相关函数如下;
void CWorkManage::OnSelchangeListemployeework()
{
CString str;
int index = m_employeework.GetCurSel();
if(index != -1){
CString id = m_employeework.GetText(index, str);
EmployeeInfo* m_EmployeeInfo = GetWorkStyleInfo(id);
}
}EmployeeInfo* CWorkManage::GetWorkStyleInfo(CString idstr)
{
UpdateData(true);
......
......
workstylename = vartostr( pRecordset->GetCollect(_variant_t("workstylename")));
starttime = vartostr( pRecordset->GetCollect(_variant_t("teamstarttime"))); // EmployeeInfo* m_EmployeeInfo;
m_EmployeeInfo->starttime = starttime;
m_EmployeeInfo->workstylename = workstylename;
return EmployeeInfo;
}
可是出现6个错误,大家帮忙看一下,我看了一下午,晕了:(
m_EmployeeInfo->starttime = starttime;
m_EmployeeInfo->workstylename = workstylename; return m_EmployeeInfo;
m_EmployeeInfo->starttime = starttime;
m_EmployeeInfo->workstylename = workstylename;
Compiling...
WorkManage.cpp
D:\Sign\SignIn\Projects\SignMain\WorkManage.cpp(570) : error C2143: syntax error : missing ';' before '*'
D:\Sign\SignIn\Projects\SignMain\WorkManage.cpp(570) : error C2501: 'EmployeeInfo' : missing storage-class or type specifiers
D:\Sign\SignIn\Projects\SignMain\WorkManage.cpp(571) : error C2501: 'GetWorkStyleInfo' : missing storage-class or type specifiers
D:\Sign\SignIn\Projects\SignMain\WorkManage.cpp(571) : error C2556: 'int *__thiscall CWorkManage::GetWorkStyleInfo(class CString)' : overloaded function differs only by return type from 'struct CWorkManage::EmployeeInfo *__thiscall CWorkManage::GetW
orkStyleInfo(class CString)'
d:\sign\signin\projects\signmain\workmanage.h(104) : see declaration of 'GetWorkStyleInfo'
D:\Sign\SignIn\Projects\SignMain\WorkManage.cpp(571) : error C2371: 'GetWorkStyleInfo' : redefinition; different basic types
d:\sign\signin\projects\signmain\workmanage.h(104) : see declaration of 'GetWorkStyleInfo'
D:\Sign\SignIn\Projects\SignMain\WorkManage.cpp(605) : error C2275: 'CWorkManage::EmployeeInfo' : illegal use of this type as an expression
Error executing cl.exe.SignMain.exe - 6 error(s), 0 warning(s)
CString starttime;
CString workstylename;
}EmployeeInfo;把声明改成这样
Compiling...
WorkManage.cpp
D:\Sign\SignIn\Projects\SignMain\WorkManage.cpp(570) : error C2143: syntax error : missing ';' before '*'
D:\Sign\SignIn\Projects\SignMain\WorkManage.cpp(570) : error C2501: 'EmployeeInfo' : missing storage-class or type specifiers
D:\Sign\SignIn\Projects\SignMain\WorkManage.cpp(571) : error C2501: 'GetWorkStyleInfo' : missing storage-class or type specifiers
D:\Sign\SignIn\Projects\SignMain\WorkManage.cpp(571) : error C2556: 'int *__thiscall CWorkManage::GetWorkStyleInfo(class CString)' : overloaded function differs only by return type from 'struct CWorkManage::_EmployeeInfo *__thiscall CWorkManage::Get
WorkStyleInfo(class CString)'
d:\sign\signin\projects\signmain\workmanage.h(109) : see declaration of 'GetWorkStyleInfo'
D:\Sign\SignIn\Projects\SignMain\WorkManage.cpp(571) : error C2371: 'GetWorkStyleInfo' : redefinition; different basic types
d:\sign\signin\projects\signmain\workmanage.h(109) : see declaration of 'GetWorkStyleInfo'
D:\Sign\SignIn\Projects\SignMain\WorkManage.cpp(605) : error C2275: 'CWorkManage::EmployeeInfo' : illegal use of this type as an expression
Generating Code...
Compiling...
SignMainDoc.cpp
Generating Code...
Compiling...
WorkDefineDlg.cpp
Generating Code...
Error executing cl.exe.SignMain.exe - 6 error(s), 0 warning(s)
EmployeeInfo* CWorkManage::GetWorkStyleInfo(CString idstr)
{
...
EmployeeInfo* m_EmployeeInfo;
m_EmployeeInfo->starttime = starttime;
m_EmployeeInfo->workstylename = workstylename;
return EmployeeInfo;
}看你上面的代码
EmployeeInfo* m_EmployeeInfo;只是声明一下,它并没有给这个结构分配空间!
接着你去给这个结构的成员变量赋值,当然错了(没有空间,你怎么放?)修改为:
EmployeeInfo* m_EmployeeInfo = new EmployeeInfo;
struct EmployeeInfo {
CString starttime;
CString workstylename;
};
应该修改为
typedef struct EmployeeInfo {
CString starttime;
CString workstylename;
}EmployeeInfo ;或者把EmployeeInfo 部分写成 struct EmployeeInfo(这样累)
要么把函数体定义改为
CWorkManage::EmployeeInfo* CWorkManage::GetWorkStyleInfo(CString id)
{
...
}
#define AFX_WORKMANAGE_H__C6750CC9_D78F_4A2E_9C5B_99B4DAFF2B48__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// WorkManage.h : header file
//
#include "grid\gridctrl.h"
#include "DragbarGroup.h"
#include "WorkDefineWraper.h"
#include "WorkStyleWraper.h"
/////////////////////////////////////////////////////////////////////////////
// CWorkManage form view#ifndef __AFXEXT_H__
#include <afxext.h>
#endif
class CWorkManage : public CFormView
{
friend class CWorkDefineDlg;
protected:
CWorkManage(); // protected constructor used by dynamic creation
DECLARE_DYNCREATE(CWorkManage)// Form Data
public:
//{{AFX_DATA(CWorkManage)
enum { IDD = IDD_WORKMANAGE };
CListBox m_employeework;
CListBox m_list;
CDragbarGroup m_bar;
int m_workstylecyc;
int m_dis;
int m_fromend;
int m_fromstart;
int m_index;
int m_tostart;
CString m_stylename;
//}}AFX_DATA// Attributes
public:
CGridCtrl m_Grid;
CImageList m_Imglist;
int m_selRow;
CWorkDefineWraper m_workdefines;
CWorkStyleWraper m_workstylewraper; BOOL bFresh;
/*
struct EmployeeInfo {
// EmployeeInfo( CString _startday, CString _wsname )
// :starttime( _startday ), workstylename( _wsname) {}
// EmployeeInfo(){}
CString starttime;
CString workstylename;
};
*/
typedef struct EmployeeInfo {
CString starttime;
CString workstylename;
}EmployeeInfo;// Operations
public:// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CWorkManage)
public:
virtual void OnInitialUpdate();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL// Implementation
protected:
virtual ~CWorkManage();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif // Generated message map functions
//{{AFX_MSG(CWorkManage)
afx_msg void OnSavework();
afx_msg void OnEditworkaddition();
afx_msg void OnDelwork();
afx_msg void OnCopy();
afx_msg void OnClearall();
afx_msg void OnAddtotable();
afx_msg void OnSelchangeListemployeework();
//}}AFX_MSG
afx_msg void OnGridSelchanged(NMHDR *pNMHDR,LRESULT *pResult);
DECLARE_MESSAGE_MAP()
private:
BOOL SaveWorkStyle();
void DrawBarTitle();
void DrawBarDate();
void UpdateBars(CString workstylename);
void UpdateEmployeeBars(CString workstylename);
BOOL InitGrid();
void FillList();
void InitEmployeeList();
EmployeeInfo* GetWorkStyleInfo(CString id);};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_WORKMANAGE_H__C6750CC9_D78F_4A2E_9C5B_99B4DAFF2B48__INCLUDED_)
{
...
}在其他任何类外的代码中只能使用CWorkManage::EmployeeInfo而不是EmployeeInfo
{
CString starttime;
CString workstylename;
}EmployeeInfo;
如果别处也需要使用这个结构,最好还是把它放在类声明之外