• Advertisement

Archived

This topic is now archived and is closed to further replies.

Operator overloading/inheritance in class template

This topic is 5685 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Maybe I'm missing something obvious here but I've checked this over and over and am sure it should work... This is a cut down version of my matrix classes:
    
typedef float T;
typedef unsigned int uint;


namespace glgui
{
	template <uint D>
	struct _glgMatrix;

	template <uint D>
	struct _glgMatrixBase
	{
	protected:
		T		elem[D][D];

	public:
		_glgMatrixBase() {}

	public:
		inline T&		operator() (uint r, uint c)
		{ return elem[r][c]; }
		inline const T&	operator() (uint r, uint c) const
		{ return elem[r][c]; }

		inline _glgMatrix<D>	operator* (T value) const;
	};

	template <uint D>
	inline _glgMatrix<D> _glgMatrixBase<D>::operator* (T value) const
	{
		_glgMatrix<D> m;
		for(int i = 0; i < D; ++i)
			for(int j = 0; j < D; ++j)
				m(i, j) = elem[i][j] * value;
		return m;
	}


	// derived class used to specialize for certain sizes

	template <uint D>
	struct _glgMatrix: public _glgMatrixBase<D>
	{

	};


	class A {};

	// 3x3 specialization for manipulating 2D points

	template <>
	struct _glgMatrix<3U>: public _glgMatrixBase<3U>
	{
		inline _glgMatrix	operator* (const A& a) const;
	};

	template <>
	inline _glgMatrix<3U> _glgMatrix<3U>::operator* (const A& a) const
	{
		return _glgMatrix();
	}


	typedef _glgMatrix<3>		glgMatrix33;
	typedef _glgMatrix<4>		glgMatrix44;
}


// then in a cpp file

void f()
{
    glgMatrix44 m44;
    m44 = m44 * 2.0f;

    glgMatrix33 m33;
    m33 = m33 * 2.0f;
}
    
And the error is on the last line of the function f above: error C2679: binary '*' : no operator defined which takes a right-hand operand of type 'const float' (or there is no acceptable conversion) So _glgMatrix<4> inherits the operator fine, but the overloaded operator defined in the specialization for _glgMatrix<3> (with argument const A& a) seems to hide the initial operator defined in _glgMatrixBase. Why? What's going on?? Edit: forgot to say I'm using VC++6. Please help. Cameron [edited by - kamrann on July 29, 2002 5:38:15 PM]

Share this post


Link to post
Share on other sites
Advertisement

  • Advertisement