0

我有一个带有这个成员函数的类;

void AddTo(vertex** vrtList) {
  if(*vrtList != 0) {
    *vrtList->m_vrtLast = this;
  }
  m_vrtNext = *vrtList;  // save existing list, if any
  m_vrtLast = 0;
  *vrtList = this;
}

gcc 给了我一个错误信息;

错误:请求'* vrtList'中的成员'm_vrtLast',它是非类类型'vertex*'</p>

如果我替换*vrtList->m_vrtLastvrtList[0]->m_vrtLast,编译器会接受它,并且代码可以正常工作。

这是一个错误(在 gcc 中)还是一个特性(在 C/C++ 中)?

4

2 回答 2

3

这不是错误,而是由于运算符优先级。运算符->的优先级高于*所以 *vrtList->m_vrtLast与 相同*(vrtList->m_vrtLast),这不是您想要的。

[]并且->具有相同的优先级,但从左到右读取,因此在.[]之前遇到->.

使用[](*vrtList)->m_vrtLast

于 2013-02-28T22:43:40.863 回答
2

这是关于 的优先级operator*

*vrtList->m_vrtLast不等于,(*vrtList)->m_vrtLast而是等于*(m_vrtList->m_vertLast)

所以你必须相应地添加括号。

于 2013-02-28T22:42:40.330 回答