2012-07-09 29 views
7

No estoy seguro de la cantidad de información necesaria para responder a esto, así que dígame si se necesita más información.C++ La clase no es la base de sí misma

Im modificación de un gran código que he escrito cuando de repente me encontré con este mensaje: error: type 'integer' is not a direct base of 'integer'. Sé que es un problema de herencia, pero no heredo otras clases.

El código que está causando este problema es

integer(const std::string & val, uint16_t base): integer(val.begin(), val.end(), base) {} 

y

integer(iterator start, iterator end, uint16_t base) 

se ha definido.

¿Qué debo hacer para solucionarlo?

EDIT: im compilar con -std = C++ 0x, que de acuerdo con las respuestas, yo debería ser capaz de compilar, a menos que mi compilador es antigua: gcc 4.6.2 creo

+2

Actualizar respuesta, disponible en gcc 4.7 en adelante. – hmjd

Respuesta

19

Parece que está intentando llamar a otro constructor directamente. No se puede hacer eso en C++ 03, pero can do exactly that in C++11:

class SomeType { 
    int number; 

public: 
    SomeType(int new_number) : number(new_number) {} 
    SomeType() : SomeType(42) {} 
}; 

que necesitará g ++ 4.7 o posterior para que esto funcione, 4.6 no es compatible con esta característica, sin embargo, incluso con -std = C++ 0x, que probé con ambas versiones en mi sistema.

+0

estoy compilando con -std = C++ 0x – calccrypto

+3

@calccrypto GCC 4.6 no es compatible con esto. 4.7 creo. – Flexo

3

No se puede llamar a un constructor de la misma clase en la lista de inicializadores de un constructor diferente (en C++ 03). Pero se puede inicializar los miembros en consecuencia:

integer(const std::string & val, uint16_t base): _start(val.begin()) 
               _end(val.end()) 
               _base(base) 
{} 
4

No está permitido invocar otros constructores de la misma class así (hay que delegan constructores en C++ 11). Necesita inicializar los miembros de la clase (como probablemente haya hecho en el otro constructor).

EDIT:

Según C++0x/C++11 Support in GCC , constructores de delegación se ejecutaron en v4.7 GCC

Cuestiones relacionadas