«Ожидаемые»: «,«, «,«; »,«} »или« __attribute__ »перед« {токеном »в функции-члене Struct - PullRequest
4 голосов
/ 22 ноября 2010

Я пытаюсь получить слишком сильный код 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 ]

1 голос
/ 22 ноября 2010

Возможно, вы пытаетесь скомпилировать компилятор Си?Если вы попытаетесь скомпилировать свой код C ++ с помощью компилятора только C, я думаю, вы получите такие сообщения.

1 голос
/ 22 ноября 2010

Ваши встроенные функции пропускают свои спецификаторы области действия класса: Нет Vector3f::.

Например:

inline float Vector3f::Dot (const Vector3f& l, const Vector3f r)
{
    // ...
}
0 голосов
/ 22 ноября 2010

Я не смог разрешить ошибки компилятора, поэтому я просто переписал методы как статические встроенные методы.Вытащив все из структуры, мне удалось заставить ее работать.Перегрузки оператора, которые я только что снял, потому что они фактически нигде не использовались в проекте.(Я сказал, что это было слишком сильно).

Спасибо всем, кто ответил!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...