PDA

View Full Version : [C++]left of 'method' must point to class type


Tommo
05-04-2009, 13:25
Salve,
sto provando ad implementare un custom memory allocator nel mio framework, obbligando tutte le classi ad ereditare una "base class" che fa l'override degli 8 new/delete.
Dentro a questi new/delete chiamo i metodi malloc/free di una classe polimorfica così da cambiare a piacimento il metodo di allocazione.

Il codice interessato è questo:

CPP
/// operator new, with debug line info
void* BaseObject::operator new(size_t sz, const char* file, int line, const char* func)
{
return memoryAllocator->malloc(sz, file, line, func);
}

void* BaseObject::operator new(size_t sz)
{
return memoryAllocator->malloc(sz);
}

/// placement operator new
void* BaseObject::operator new(size_t sz, void* ptr)
{
return memoryAllocator->place( sz, ptr );
}

/// array operator new, with debug line info
void* BaseObject::operator new[] ( size_t sz, const char* file, int line, const char* func )
{
return memoryAllocator->malloc(sz, file, line, func);
}

void* BaseObject::operator new[] ( size_t sz )
{
return memoryAllocator->malloc(sz);
}

void BaseObject::operator delete( void* ptr )
{
memoryAllocator->free(ptr);
}

// Corresponding operator for placement delete (second param same as the first)
void BaseObject::operator delete( void* ptr, void* )
{
memoryAllocator->free(ptr);
}

// only called if there is an exception in corresponding 'new'
void BaseObject::operator delete( void* ptr, const char* , int , const char* )
{
memoryAllocator->free(ptr);
}

void BaseObject::operator delete[] ( void* ptr )
{
memoryAllocator->free(ptr);
}


void BaseObject::operator delete[] ( void* ptr, const char* , int , const char* )
{
memoryAllocator->free(ptr);
}

e gli errori di questo tipo:
d:\dev\cudarenderer\src\baseobject.cpp(48) : error C2227: left of '->malloc' must point to class/struct/union/generic type
Cioè, non riesce a trovare che cosa sia memoryAllocator.
La cosa strana è che negli altri metodi nello stesso .cpp, riesce a trovarlo ed usarlo.
Solo negli overload di new e delete non riesce...

Qualche idea? :stordita:

Tommo
05-04-2009, 14:14
Uhm risolto... era banale infine.

new e delete sono static anche se non c'è scritto.
memoryAllocator invece non lo era... per cui è bastato renderlo static :read:

PS: Consiglio l'uso di nedmalloc :asd: