返回首页

内联函数的帮助: 此代码是一个Vector类的代码,持有3点(X,Y,Z)。此代码有错误和问题的根源是在第123行,这是联Vector3符*(浮法K,常量Vector3 V)

如果有人可以帮助我,将是非常美妙的。谢谢你抽出时间来阅读这。上帝保佑你们。

zvjezdan Veselinovic

#include <iostream>

#include <string>

#include <algorithm>

#include <cmath>

#include <vector>

#include <cstdlib>

#define inline

 

using namespace std;

 

int main()

{

	class Vector3

	{

	public: float x, y, z;

			Vector3() {}

			Vector3(const Vector3 &a) : x(a.x), y(a.y), z(a.z) {}

			Vector3(float nx, float ny, float nz) : x(nx), y(ny), z(nz) {}

			Vector3 &operator = (const Vector3 &a)

			{

				x = a.x;

				y = a.y;

				z = a.z;

				return *this;

			}

			bool operator ==(const Vector3 &a) const 

			{

				return x==a.x && y ==a.y && z==a.z;

			}

			bool operator !=(const Vector3 &a) const

			{

				return x != a.x || y != a.y || z != a.z;

			}

			void zero()

			{

				x = y = z = 0.0f;

			}

			Vector3 operator -() const

			{

				return Vector3(-x, -y, -z);

			}

			Vector3 operator +( const Vector3 &a) const

			{

				return Vector3(x + a.x, y + a.y, z + a.z);

			}

			Vector3 operator -( const Vector3 &a) const

			{

				return Vector3(x - a.x, y - a.y, z - a.z);

			}

			Vector3 operator *(float a) const

			{

				return Vector3(x * a, y * a, z * a);

			}

			Vector3 operator /(float a) const

			{

				float oneOverA = 1.0f / a;

				return Vector3(x * oneOverA, y * oneOverA, z * oneOverA);

			}

			Vector3 &operator +=(const Vector3 &a)

			{

				x += a.x;

				y += a.y;

				z += a.z;

				return *this;

			}

			Vector3 &operator -=(const Vector3 &a)

			{

				x -= a.x;

				y -= a.y;

				z -= a.z;

				return *this;

			}

			Vector3 &operator *=(float a)

			{

				x *= a;

				y *= a;

				z *= a;

				return *this;

			}

			Vector3 &operator /=(float a)

			{

				float oneOverA = 1.0f / a;

				x *= oneOverA;

				y *= oneOverA;

				z *= oneOverA;

				return *this;

			}

			void normalize()

			{

				float magSq = x*x + y*y + z*z;

				if(magSq > 0.0f)

				{

					float oneOverMag = 1.0f / sqrt(magSq);

					x *= oneOverMag;

					y *= oneOverMag;

					z *= oneOverMag;

 

				}

				else if(magSq < 0.0f)

				{

					cout << "There has got to be an error." << endl;

					cout << endl;

					normalize();

				}

			}

			float operator *(const Vector3 &a) const 

			{

				return x * a.x + y * a.y + z * a.z;

			}

	

	inline float vectorMag(const Vector3 &a)

	{

		return sqrt(a.x * a.x + a.y * a.y + a.z * a.z);

	}

	

	inline Vector3 crossProduct(const Vector3 &a, const Vector3 &b)

	{

		return Vector3( a.y * b.z - a.z * b.y, 

			            a.z * b.x - a.x * b.z, 

			            a.x * b.y - a.y * b.x);

	}

	

	inline Vector3 operator *(float k, const Vector3 &v)

	{

		return Vector3(k * v.x, k * v.y, k * v.z); 

	}

 

	inline float distance( const Vector3 &a, const Vector3 &b)

	{

		float dx = a.x - b.x;

		float dy = a.y - b.y;

		float dz = a.z - b.z;

		return sqrt(dx * dx + dy * dy + dz * dz);

	}

	};

 

	cout << endl;

	system("pause");

	return 0;

}

回答

评论会员:。基督教Graus 时间:2012/02/04
值得一提的是,内联是编译器的提示。内联的东西是免费的,你不告诉它,并决定不为inline,你告诉它。Zvjezdan Veselinovic:谢谢的mbue,真正帮助了很多。我真的很感激这种帮助。太感谢你了
评论会员:游客 时间:2012/02/04
!mbue:操作*不能有两个参数:{C}它是这样做的。问候。