2011-05-19 16 views
5

Temel olarak, geneticAlgorithmC++ - Bir sınıfın yapıcısından ayrı bir sınıfın kurucusunu nasıl başlatırım?

sınıfında deltaKinematics sınıfının yerel (ve özel) bir örneğini oluşturmaktır. geneticAlgorithm.h dosyasında

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

class GeneticAlgorithm { 
    //private 
    DeltaKinematics deltaRobot; 

public: 

    GeneticAlgorithm(); //constructor 

}; 

var. GeneticAlgorithm kurucusunu bildirmeye gittiğimde, DeltaKinematics

örneğinin nasıl yapılandırılacağını öğrenemiyorum Bu geneticAlgorithm.cpp yapıcısıdır:

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"; 
} 

Bu yerel örneği başlatma hakkında nasıl giderim?

cevap

11

Üye başlatıcısı listesi:

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

Teşekkürler. İlgi dışı, bu dil yapısının adı nedir? Ben C++ için çok yeni ve hala jargon üzerinde bir kavrama almak –

+3

Bu taban sınıfları ve üye değişkenleri başlatmak için kullanılan bir üye başlatıcı listesi. Sipariş üyesi değişkenlerinde çağrılacaklarının, bunları belirttiğiniz sırada değil, * bildirildiğini * unutmayın. Bu gibi birden fazla üye başlatabilirsiniz: Foo :: Foo(): BaseClass (0), MemVar (1), AnotherMemVar (2) {} ' – Erik

+0

eğer 100 bir sabit değil ama bir değişken gerekli ise mantık Kurucuya iletilmeden önce hesaplanacak – Alexander

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

Not yapıcı adından sonra :: Bu sınıfın üyesi veri değişkenler için başlatma dizisinin başlangıcıdır. Yaptıkları parametrelerle yapıcılarına çağrı olarak görünürler ve bildirildikleri sırayla olmalıdırlar.

+1

':' üye başlatıcılarını, hem temel sınıfları hem de üye değişkenleri başlatır. Ve hayır, bildirme sırasına göre olmaları gerekmiyor, ama bildirme sırasına göre * olacaklar. – Erik

+0

Eh, derleyiciye gerçekten bağlı, siparişte ısrar ettiğim bazı derleyiciler siparişte ısrar ediyorlar ve sipariş uymuyorsa uyarı veriyorlar. – littleadv

+0

Başlangıç ​​değişkenlerini üye değişkenlerinin bildirildiği sırada yerleştirmeniz gerekmez. Gcc örn. Bunu yapmazsanız uyarır, ancak başlatıcıların yanlış sırasını dikkate alan derleyici bir * hata * sadece yanlıştır. – Erik

İlgili konular