C++ 解引用与阵列访问
我有一个具有此成员函数的类C++ 解引用与阵列访问,c++,gcc,C++,Gcc,我有一个具有此成员函数的类 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”,该成员属于非类
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_vrtList
替换为vrtList[0]->m_vrtList
,编译器将接受它,代码工作正常
这是一个bug(在gcc中)还是一个特性(在C/C++中)?这与
操作符的优先级有关*
*vrtList->m_vrtLast
并不等同于(*vrtList)->m_vrtLast
,而是*(m_vrtList->m_vertLast)
因此,您必须相应地添加括号。这是关于
运算符的优先级的问题*
*vrtList->m_vrtLast
并不等同于(*vrtList)->m_vrtLast
,而是*(m_vrtList->m_vertLast)
因此,您必须相应地添加括号。这不是一个错误,而是由于。运算符
->
的优先级高于*
,因此*vrtList->m_vrtLast
与*(vrtList->m_vrtLast)
相同,这不是您想要的
[]
和->
具有相同的优先级,但从左到右读取,因此在->
之前遇到[]
使用
[]
或(*vrtList)->m_vrtList
这不是一个bug,而是由于。运算符->
的优先级高于*
,因此*vrtList->m_vrtLast
与*(vrtList->m_vrtLast)
相同,这不是您想要的
[]
和->
具有相同的优先级,但从左到右读取,因此在->
之前遇到[]
使用
[]
或(*vrtList)->m_vrtLast
(*vrtList)->m_vrtLast
可能会有更好的机会做你想做的事情。不,它不是一只虫子;这是一个优先问题。试着用vrtList->m_vrtLast替换*vrtList->m_vrtLast如果你是正确的,它会。vrtList[0]也是如此。因此,信息是后缀运算符优先于前缀运算符。功能,而不是bug。@user1929959不。那不会给他想要的东西。(*vrtList)->m_vrtLast
可能会有更好的机会做你想要的事情。不,它不是一只虫子;这是一个优先问题。试着用vrtList->m_vrtLast替换*vrtList->m_vrtLast如果你是正确的,它会。vrtList[0]也是如此。因此,信息是后缀运算符优先于前缀运算符。功能,而不是bug。@user1929959不。这不会给他想要的。对于他想要的,(*vrtList)是唯一正确的方法。vrtList[0]是一种不好的做法。对于他想要的东西,(*vrtList)是唯一正确的方法。vrtList[0]是一种不好的做法。