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个错误,大家帮忙看一下,我看了一下午,晕了:(

解决方案 »

  1.   

    EmployeeInfo* m_EmployeeInfo;  这句未初始化
      

  2.   

    EmployeeInfo* m_EmployeeInfo = new EmployeeInfo;
        m_EmployeeInfo->starttime = starttime;
        m_EmployeeInfo->workstylename = workstylename;    return m_EmployeeInfo; 
      

  3.   

    Semigod() , 下面这两个不是初始化吗?谢谢   
        m_EmployeeInfo->starttime = starttime;
        m_EmployeeInfo->workstylename = workstylename;
      

  4.   

    Earthdog(Earthdog) ,我改了,还是有6个错.谢谢
    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)
      

  5.   

    typedef struct _EmployeeInfo {
        CString starttime;
        CString workstylename;
    }EmployeeInfo;把声明改成这样
      

  6.   

    --------------------Configuration: SignMain - Win32 Debug--------------------
    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)
      

  7.   

    不会啊,WorkManage.h包含了没有,方便的话把你的WorkManage.h贴出来
      

  8.   

    我看出来了!
    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;
      

  9.   

    还有你的定义:
    struct EmployeeInfo {
        CString starttime;
        CString workstylename;
    };
    应该修改为
    typedef struct EmployeeInfo {
        CString starttime;
        CString workstylename;
    }EmployeeInfo ;或者把EmployeeInfo 部分写成 struct EmployeeInfo(这样累)
      

  10.   

    To unrise(小超) 这个大家都看出来了,楼上的兄弟都给他改了
      

  11.   

    你把结构定义在类里了吧?要么把结构定义在类外边,
    要么把函数体定义改为
    CWorkManage::EmployeeInfo* CWorkManage::GetWorkStyleInfo(CString id)
    {
    ...
    }
      

  12.   

    unrise(小超) ,我已经加上new了,另外,文件包含没有问题。WorkManage.h如下:#if !defined(AFX_WORKMANAGE_H__C6750CC9_D78F_4A2E_9C5B_99B4DAFF2B48__INCLUDED_)
    #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_)
      

  13.   

    别是struct EmployeeInfo 定义在那个 WorkManage类里面的吧?把代码重新贴一遍吧,包括头文件
      

  14.   

    这就对了啊,你的EmployeeInfo定义在WorkManager类里面的么
      

  15.   

    那就没错了,cpp文件里GetWorkStyleInfo函数定义改为CWorkManage::EmployeeInfo* CWorkManage::GetWorkStyleInfo(CString id)
    {
    ...
    }在其他任何类外的代码中只能使用CWorkManage::EmployeeInfo而不是EmployeeInfo
      

  16.   

    在外部使用时应当写成 CWorkManage::EmployeeInfo
      

  17.   

    typedef struct 
    {
        CString starttime;
        CString workstylename;
    }EmployeeInfo;
    如果别处也需要使用这个结构,最好还是把它放在类声明之外