2012-03-26 6 views
1

Der MergeSort läuft durch den Vektor gegeben ihm und Sortierungen über das Fitness-Variable in meiner Citizen Basisklasse vererbt wird.C++ Klasse Funktion Vererbungs Variable einer anderen Klasse verwenden, das von der Basisklasse

Ich möchte dies in meiner SGA-Klasse verwenden, um das gleiche mit seinem SCitizen (die die Fitness-Variable erbt?); aber ich kann das nicht, da die Funktion einen Citizen-Typ anfordert.

Ist es nicht möglich, die abgeleitete Klasse für die gleiche Funktion zu verwenden, da die Funktion nur Mitglieder der Basisklasse verwendet, die alle Klassen haben? Oder habe ich etwas im Setup der Klassen verpasst?

Danke für jede Hilfe! Tut mir leid, wenn das wiederholt wird; Ich hatte eine Suche hier und eine Google kam aber mit nichts - ich war nicht einmal besonders sicher, was zu google ..

class Citizen 
{ 
public: 
     double fitness; 

     Citizen(); 
}; 

class SCitizen : public Citizen 
{ 
public: 
     std::string code; 

     SCitizen(); 
}; 

class GA 
{ 
public: 
     std::vector<Citizen>* citizens; 
     void MergeSort(std::vector<Citizen>* list); 
}; 

class SGA : public GA 
{ 
public: 
     std::vector<SCitizen>* sCitizens; 
     void FitnessSort(); 
}; 
+0

Abhängig von Ihrer Implementierung von FitnessSort kann eine Umwandlung in Citizen in der SCitizen-Klasse nicht bereitgestellt werden? –

+0

FitnessSort ruft gerade MergeSort mit sCitizens auf (verursacht mein Problem). Der MergeSort würde dann diese Liste basierend auf der Fitnessvariable in der Citizen-Basisklasse sortieren; aber ich brauche auch die zugehörige Variable vom SCitizen. – user1293210

Antwort

1

Damit die vector<T>Citizen Werte speichern und alle seine Untertypen Sie müssen eine vector<Citizen*> verwenden. A vector<Citizen> kann nur Citizen Werte speichern und alle Untertypen abschneiden, die verwendet werden.

+0

Danke für deine Antwort; Ich habe MergeSort wie diese rewriten: 'MergeSort (std :: vector * Liste)' und 'Leere FitnessSort();' sendet sCitizens (die jetzt std :: vector ), aber ich diesen Fehler bin Empfang: Konvertierung Parameter 1 von 'std :: vector <_Ty> *' to 'std :: vector <_Ty> *' mit SCitizen * und * Citizen – user1293210

Verwandte Themen