在Struct成员函数中的'{'token'之前的“expected':',',',';','}'或'__attribute__'

时间:2010-11-22 16:21:54

标签: c++ objective-c xcode struct compiler-errors

我正在尝试让我的教授过度编写的C ++代码进行编译。这是我的代码:

/**
 * Vector class.
 * Common mathematical operations on vectors in R3.
 *
 * Written by Robert Osada, March 1999.
 **/
#ifndef __VECTOR_H__
#define __VECTOR_H__

/**
 * Vector3
 **/
struct Vector3f
{
  // coordinates
  float x, y, z;

  // norm
  float      normSquared () { return x*x+y*y+z*z; }
  double norm        () { return sqrt(normSquared()); }

  // boolean operators
  bool operator == (const Vector3f& v) const { return x==v.x && y==v.y && z==v.z; }
  bool operator != (const Vector3f& v) const { return x!=v.x || y!=v.y || z!=v.z; }

  // operators
  Vector3f  operator +  (const Vector3f &v) const { return Vector3f(x+v.x, y+v.y, z+v.z); }
  Vector3f& operator += (const Vector3f &v)       { x+=v.x; y+=v.y; z+=v.z; return *this; }
  Vector3f  operator -  () const                 { return Vector3f(-x, -y, -z); }
  Vector3f  operator -  (const Vector3f &v) const { return Vector3f(x-v.x, y-v.y, z-v.z); }
  Vector3f& operator -= (const Vector3f &v)       { x-=v.x; y-=v.y; z-=v.z; return *this; }
  Vector3f  operator *  (float s) const              { return Vector3f(x*s, y*s, z*s); }
  Vector3f& operator *= (float s)                { x*=s; y*=s; z*=s; return *this; }
  Vector3f  operator /  (float s) const          { assert(s); return (*this)* (1/s); }
  Vector3f& operator /= (float s)                { assert(s); return (*this)*=(1/s); }

 // create a vector
 Vector3f (float x_=0, float y_=0, float z_=0) : x(x_), y(y_), z(z_) {};

 // set coordinates
 void set (float x_, float y_, float z_) { x=x_; y=y_; z=z_; }
};

inline float Dot (const Vector3f& l, const Vector3f r)
{
  return l.x*r.x + l.y*r.y + l.z*r.z;
}

// cross product
inline Vector3f Cross (const Vector3f& l, const Vector3f& r)
{
  return Vector3f(
    l.y*r.z - l.z*r.y,
    l.z*r.x - l.x*r.z,
    l.x*r.y - l.y*r.x );
}

#include "Misc.h"
/*
inline Vector3f Min (const Vector3f &l, const Vector3f &r)
{
  return Vector3f(Min(l.x,r.x), Min(l.y,r.y), Min(l.z,r.z));
}

inline Vector3f Max (const Vector3f &l, const Vector3f &r)
{
  return Vector3f(Max(l.x,r.x), Max(l.y,r.y), Max(l.z,r.z));
}
*/
#endif

我在定义normSquared()的行上得到了错误。无论结构中出现哪种方法,它似乎都会出错。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

您的内联函数错过了他们的类范围说明符:否Vector3f::

例如:

inline float Vector3f::Dot (const Vector3f& l, const Vector3f r)
{
    // ...
}

答案 1 :(得分:1)

您是否尝试使用C编译器进行编译?如果您尝试使用仅C编译器编译C ++代码,我认为您将获得这些类型的消息。

答案 2 :(得分:0)

我无法解决编译器错误,所以我只是将方法重写为静态内联方法。通过从结构中取出所有内容,我设法让它工作。操作员超载我刚刚丢弃,因为它们实际上并没有在项目的其他任何地方使用过。 (我说它过度工程了。)

感谢所有回答的人!