2010-11-30 8 views
7

favor, eche un vistazo a este código y ejecutarlo:
Me estoy poniendo muy extraño error: Error C2663
1 error: 'Allocator :: allocate_help': 2 sobrecargas no tienen conversión legal para 'este' punteroninguna conversión legal de este puntero

template<class FailureSignal> 
class Allocator 
{ 
private: 
    template<class Exception,class Argument> 
    void allocate_help(const Argument& arg,Int2Type<true>) 
    { 
    } 

    template<class Exception,class Argument> 
    std::nullptr_t allocate_help(const Argument& arg,Int2Type<false>) 
    { 
     return nullptr; 
    } 

public: 
    template<class T> 
    void Allocate(signed long int nObjects,T** ptr = 0)const 
    { 
    allocate_help<std::bad_alloc>(1,Int2Type<true>()); 
    } 

}; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    Allocator<int> all; 
    all.Allocate<int>(1); 
    return 0; 
} 

No entiendo este err msg. Espero que alguien pueda ayudarme con esto. Gracias.

+1

No puede compilar como lo solicitó. 'Int2Type' no está declarado/definido –

Respuesta

12

Me di cuenta Allocate se declaró const pero allocate_help no es - ¿podría estar relacionado con el problema?

+1

Sí, gracias. ¿No podrían proporcionar un poco más de mensajes informativos? –

+2

@There: buscar y [usted encontrará] (http://msdn.microsoft.com/en-us/library/bhx1a546.aspx "Error del compilador C2663"). Hay dos resoluciones sugeridas. * 1: elimine ** const ** de la declaración del objeto. 2. Agregue ** const ** a una de las sobrecargas de función del miembro. * (Este es el primer hit en Google al buscar C2663) – Default

+1

@There: es muy informativo en su forma :) Dice que no puede convertir el 'this' puntero (es decir, de' const Allocator * 'a' Allocator * 'en este caso) para cualquiera de las sobrecargas' allocate_help'. –

0

Tuve el mismo error que también fue causado por const pero de una manera un poco diferente.

Tengo dos funciones virtuales (sobrecargas), una era const y la otra no. Esto estaba causando el problema. Resulta que si desea sobrecargar una función, ambos deben coincidir si son const o no.

virtual void value() const = 0; 
virtual void value(MyStruct & struct) = 0; 

El código anterior causará este error. La solución es cambiar la declaración de 2do a:

virtual void value(MyStruct & struct) const = 0; 
Cuestiones relacionadas