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' の要求は、非クラス タイプ '頂点*' です</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 に答える