Re: data corruption on pointer cast
On Jul 16, 5:56 pm, gara.m...@gmail.com wrote:
Heyllo,
template<class T>
class Element
{
public:
virtual int operator == (T) = 0;
virtual int hash() = 0;
};
int exists(Element<T> * elem)
{
int h = elem->hash()%M;
for (int i=0; i < size_t[h]; i++)
This is a syntax error -- size_t is a keyword,
you can't apply array indexing to it
if ( *((T*)elem) == *((T*)set[h][i]))
This line is wrong. 'elem' does not point to
a T, it points to a class with virtual functions.
The only way this could work is if 'elem' defined
an "operator T *" conversion operator, but it doesn't.
You should never use a C-style cast in C++, because
it will usually make the compiler suppress all the
warnings that you're doing something wrong.
I'm not sure what the code is meant to do, so I can't
suggest a replacement. Element<> contains no T and
no functions to access a T, so I don't see how you
are expecting to get a T out of it.
If Element<T>::operator== took another Element<T> as
the argument, then you could write:
if ( *elem == set[h][i] )
As James Kanze pointed out, you're using far
too many pointers. You should be able to
rewrite this program to not use any pointers.