BOOL CMonthCalCtrl::SetCurSel(
   const LPSYSTEMTIME pDateTime 
);typedef struct _SYSTEMTIME {
    WORD wYear;
    WORD wMonth;
    WORD wDayOfWeek;
    WORD wDay;
    WORD wHour;
    WORD wMinute;
    WORD wSecond;
    WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
 

解决方案 »

  1.   

    楼主故作神秘整了半天,还是看走眼了吧
    typedef struct _SYSTEMTIME* LPSYSTEMTIME;const LPSYSTEMTIME 不就是 const _SYSTEMTIME*吗?不就是把指针指向的内容声明为常量吗?
      

  2.   

    代码证明一切。
    CMonthCalCtrl mcc;

    // 编译不过 begin
    const SYSTEMTIME cst;
    mcc.SetCurSel(&cst);
    // 编译不过 end
    // 编译通过 begin
    SYSTEMTIME st;
    SYSTEMTIME * const pst = &st;
    mcc.SetCurSel(pst);
    // 编译通过 end
      

  3.   

    这是错误的
    原因是将typedef当做文本扩展了。声明const LPSYSTEMTIME时,const修饰的是LPSYSTEMTIME的类型,这是一个指针。因此,该声明语句应该是把pDateTime 定义为指向SYSTEMTIME类型对象的const指针。这个定义等价于:
    SYSTEMTIME * const pDateTime;
      

  4.   

    typedef并不是简单的等同于文本扩展
      

  5.   

    谢谢楼上指正,但我一时还是想不通那么
        const SYSTEMTIME cst; 
    (&cst) 是const SYSTEMTIME * 型吗?
      

  6.   

    代码说明一切。
    bool Test(const SYSTEMTIME *pst)
    {
    pst = NULL; return true;
    }const SYSTEMTIME cst;
    Test(&cst);
    编译通过。