2011-05-19 79 views
5

基本上我想實現是班上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"; 
} 

我該如何去初始化本地實例呢?

回答

11

成員初始化列表:

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

3
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