C++ - 我如何从类的构造函数初始化一个单独的类的构造函数?

问题描述:

基本上我想实现是班上geneticAlgorithmC++ - 我如何从类的构造函数初始化一个单独的类的构造函数?

创建类deltaKinematics的地方(私人)实例在geneticAlgorithm.h文件我有:

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

class GeneticAlgorithm { 
    //private 
    DeltaKinematics deltaRobot; 

public: 

    GeneticAlgorithm(); //constructor 

}; 

这是所有罚款,但是当我去申报GeneticAlgorithm构造函数,我不知道如何来建构DeltaKinematics

的情况下这是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"; 
} 

我该如何去初始化本地实例呢?

成员初始化列表:

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

谢谢@Erik多数民众赞成在我之后。出于兴趣,该语言结构的名称是什么?我对C++很陌生,但仍然掌握了一些术语 – 2011-05-19 07:26:20

+3

这是一个成员初始化列表,用于初始化基类和成员变量。请注意,它们将按顺序调用成员变量*声明*,而不是按照您指定的顺序。你可以像这样初始化多个成员:'Foo :: Foo():BaseClass(0),MemVar(1),AnotherMemVar(2){}' – Erik 2011-05-19 07:28:07

+0

如果100不是一个常量而是一个变量所需的某些逻辑在传递给构造函数之前进行计算 – Alexander 2014-01-01 22:18:24

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

注意:构造函数名后:它是类的成员变量的数据初始化序列的开始。它们显示为对其构造函数的调用,并带有要传递的参数,并且应该与声明的顺序相同。

+1

':'启动成员初始化器,包括基类和成员变量。不,他们不需要按照声明的顺序,但是他们会按照声明的顺序被叫做*。 – Erik 2011-05-19 07:26:02

+0

那么,它确实取决于编译器,我用过的一些编译器坚持这个命令,并在订单不匹配时给出警告。 – littleadv 2011-05-19 07:26:54

+0

没有要求您按照声明成员变量的顺序放置初始化器。 Gcc例如如果你不这样做会发出警告,但是一个编译器认为初始化程序的错误顺序是* error *是不正确的。 – Erik 2011-05-19 07:30:32