C ++:运算符跨类匹配

时间:2010-02-23 00:59:33

标签: c++ operators

我正在尝试执行以下操作:

  R3MeshHalfEdge *tmp_edge = half_edge;
  R3Vector *tmp_vector = new R3Vector(R3zero_vector);

  do
  {
    **tmp_vector += tmp_edge->face->plane.Normal();**
    tmp_edge = tmp_edge->opposite->next;
  }while(tmp_edge != half_edge);

但是,编译器给出了以下错误:

R3Mesh.cpp: In member function ‘void R3MeshVertex::UpdateNormal()’:
R3Mesh.cpp:1291: error: no match for ‘operator+=’ in ‘tmp_vector += tmp_edge->R3MeshHalfEdge::face->R3MeshFace::plane.R3Plane::Normal()’

HalfEdge具有以下结构:

class R3MeshHalfEdge {
  public:
    // Constructors
    R3MeshHalfEdge(R3MeshVertex* vertex, R3MeshFace* face);

    R3MeshVertex *vertex;
    R3MeshFace *face;
    R3MeshHalfEdge *opposite;
    R3MeshHalfEdge *next;
    int id;
};

Face具有以下结构:

class R3MeshFace {
  public:
    // Constructors
    R3MeshFace(void);
    R3MeshFace(const R3MeshFace& face);
    R3MeshFace(const vector <R3MeshVertex *>& vertices);

    // Property functions
    double Area(void) const;

    // Data
    vector<R3MeshVertex *> vertices;
    R3Plane plane;
    R3MeshHalfEdge *half_edge;
    int id;
};

Vector在类中定义了以下公共操作:

class R3Vector {
 public:
  R3Vector& operator+=(const R3Vector& vector);
}

它是这样实现的:

R3Vector& R3Vector::
operator+=(const R3Vector& vector)
{
  // Add vector to this 
  v[0] += vector.v[0];
  v[1] += vector.v[1];
  v[2] += vector.v[2];
  return *this;
}

我不明白为什么编译器会给出错误。

编辑: 我忘了包含R3Plane的Normal()定义:

class R3Plane{
  public:
    const R3Vector& Normal(void) const;
}

1 个答案:

答案 0 :(得分:1)

看起来你在违规行之前和之后添加了两个星号。

  R3Vector *tmp_vector = new R3Vector(R3zero_vector);

  do
  {
    **tmp_vector += tmp_edge->face->plane.Normal();**

假设您在行的开头添加了两个而不是一个

    tmp_vector += tmp_edge->face->plane.Normal();

tmp_vector是一个指针,你想要

    *tmp_vector += tmp_edge->face->plane.Normal();