2011-05-19 21 views
5

Básicamente lo que estoy tratando de lograr es la creación de una instancia local (y privada) de la clase deltaKinematics en la clase geneticAlgorithmC++ - ¿Cómo inicializo un constructor de una clase separada del constructor de una clase?

En el archivo geneticAlgorithm.h tengo:

class DeltaKinematics; //class is defined in separate linked files 

class GeneticAlgorithm { 
    //private 
    DeltaKinematics deltaRobot; 

public: 

    GeneticAlgorithm(); //constructor 

}; 

todo esto está bien, pero cuando voy a declarar el constructor GeneticAlgorithm, no puedo encontrar la manera de construir la instancia de DeltaKinematics

Este es el constructor geneticAlgorithm.cpp:

GeneticAlgorithm::GeneticAlgorithm(){ //The error given on this line is "constructor for 'GeneticAlgorithm' must explicitly initialize the member 'deltaRobot' which does not have a default constructor" 

    DeltaKinematics deltaRobot(100); //this clearly isn't doing the trick 

    cout << "Genetic Algorithmic search class initiated \n"; 
} 

¿Cómo hago para inicializar esa instancia local?

Respuesta

11

Miembro lista de inicialización:

GeneticAlgorithm::GeneticAlgorithm() : deltaRobot(100) { 
} 
+0

Gracias @Erik eso es lo que buscaba. Fuera de interés, ¿cuál es el nombre de esa construcción de lenguaje? Soy muy nuevo en C++ y sigo teniendo control sobre la jerga –

+3

Es una lista de inicializadores de miembros, utilizada para inicializar las clases base y las variables de los miembros. Tenga en cuenta que se llamarán en el orden en que las variables miembro son * declaradas *, no en el orden en que las especifica. Puede inicializar varios miembros como este: 'Foo :: Foo(): BaseClass (0), MemVar (1), AnotherMemVar (2) {}' – Erik

+0

¿Y si ese 100 no es una constante sino una variable? para calcular antes de pasar al constructor – Alexander

3
GeneticAlgorithm::GeneticAlgorithm() : deltaRobot(100) { 
    cout << "Genetic Algorithmic search class initiated \n"; 
} 

Nota del : después del nombre del constructor: es el comienzo de la secuencia de inicialización de las variables de datos miembros de la clase. Aparecen como llamadas a sus constructores, con los parámetros que desea pasar, y deben estar en el mismo orden en que se declaran.

+1

':' inicia los inicializadores de miembros, tanto las clases base como las variables miembro. Y no, no necesitan estar en orden de declaración, pero se * llamarán * en orden de declaración. – Erik

+0

Bueno, depende realmente del compilador, algunos compiladores que he usado insisten en el orden y dan advertencias si el pedido no coincide. – littleadv

+0

No es necesario colocar los inicializadores en el orden en que se declararon las variables miembro. Gcc, por ejemplo advierte si no lo hace, pero un compilador que considera el orden incorrecto de inicializadores como * error * es simplemente incorrecto. – Erik

Cuestiones relacionadas