我有一个有这个成员函数的类;
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 *'
如果我用*vrtList->m_vrtLast
替换vrtList[0]->m_vrtLast
,编译器接受它,并且代码工作正常。
这是一个错误(在gcc中)还是一个功能(在C / C ++中)?
答案 0 :(得分:3)
这不是错误,而是由于operator precedence。运营商->
的优先级高于*
,因此*vrtList->m_vrtLast
与*(vrtList->m_vrtLast)
相同,这与您的意图不同。
[]
和->
具有相同的优先权,但从左到右阅读,因此在[]
之前遇到->
。
使用[]
或(*vrtList)->m_vrtLast
。
答案 1 :(得分:2)
这是关于operator*
的优先级。
*vrtList->m_vrtLast
不等同于(*vrtList)->m_vrtLast
,而是等同于*(m_vrtList->m_vertLast)
。
所以你必须相应地添加括号。