none
const RRS feed

  • 问题

  • 麻烦高手帮忙解答一个问题。看下这段代码有什么问题,需要怎么改。我怎么改编译后总是有错。

    class a{public: BOOL IsEmpty() const; void* m_pHead;}; 

    inline BOOL a::IsEmpty() const//{ return m_pHead=NULL;}

    报错:error C2166: l-value specifies const object

    error C2440: 'return' : cannot convert from 'void *const ' to 'int'
            This conversion requires a reinterpret_cast, a C-style cast or function-style cast

    2011年7月20日 8:14

答案

  • inline BOOL a::IsEmpty() const//{ return m_pHead==NULL;}
    麻烦把正确答案设为解答。
    2011年7月20日 8:31
    版主
  • return m_pHead == NULL

    的语义是m_pHead是不是和NULL相等,如果是返回true,如果不是返回false。

    return m_pHead = NULL

    的语义是将m_pHead赋值为NULL,然后返回m_pHead。但是由于你这个函数是const的,所以不能修改成员变量m_pHead。因为报错了。

    但是这种写法很危险,一般我们都把常量放在==左边,这样即使马虎写错了也会报错。

    return NULL == m_pHead

    你如果马虎写成

    return NULL = m_pHead

    在哪都会报错。

    另外这里你返回的是BOOL而不是bool类型。要注意BOOL是整形,不是boolean类型。有一定的错误风险

     


    麻烦把正确答案设为解答。
    2011年7月20日 9:53
    版主

全部回复

  • inline BOOL a::IsEmpty() const//{ return m_pHead==NULL;}
    麻烦把正确答案设为解答。
    2011年7月20日 8:31
    版主
  • 很感谢你的答案,是正确的,能告诉我为什么要m_pHead == NULL,能说说为什么吗,用 =为什么就是错误的了
    2011年7月20日 8:44
  • return m_pHead == NULL

    的语义是m_pHead是不是和NULL相等,如果是返回true,如果不是返回false。

    return m_pHead = NULL

    的语义是将m_pHead赋值为NULL,然后返回m_pHead。但是由于你这个函数是const的,所以不能修改成员变量m_pHead。因为报错了。

    但是这种写法很危险,一般我们都把常量放在==左边,这样即使马虎写错了也会报错。

    return NULL == m_pHead

    你如果马虎写成

    return NULL = m_pHead

    在哪都会报错。

    另外这里你返回的是BOOL而不是bool类型。要注意BOOL是整形,不是boolean类型。有一定的错误风险

     


    麻烦把正确答案设为解答。
    2011年7月20日 9:53
    版主