2016-11-21 5 views
-2

Ich habe diesen Code alles ist getrennt durch .h-Datei und. cav: Fitness.hWie verwendet man die Werte einer Variablen, die zu einer Klasse in einer anderen Klasse gehören?

class Fitness 
{ 
private: 

    // Professor's ID 
    float _fit; 

public: 

    // Inicia los datos del profesor 
    Fitness(float fit); 


    // Devuelve professor's ID 
    inline float GetFit() const { return _fit; } 

}; 

Fitness.cpp

#include "stdafx.h" 
#include "Fitness.h" 

// Inicializa los datos del fit este es el archivo cpp 
Fitness::Fitness(float fit) : _fit(fit) { } 

und der Teil, wo ich es verwenden, ist hier in einer Klasse namens Datei namens Configuración: Configuracion.h

class Configuracion 
{ 
public: 

    //Lectura del Fitness 
    hash_map<float, Fitness*> _fit; 

private: 
    // Indica que aun no se lee la información 
    bool _isEmpty; 

public: 

    // Inicia datos 
    Configuracion() : _isEmpty(true) { } 

    // Libera recursos usados 
    ~Configuracion(); 

    // Analiza datos y guarda datos 
    void ParseFile(char* fileName); 

    ///Fitness//////////////////////////// 
    inline Fitness* GetFit(float fit) 
    { 
     hash_map<float, Fitness*>::iterator it = _fit.find(fit); 

     return it != _fit.end() ? (*it).second : NULL; 
    } 

    inline float GetNFit() const 
    { 
     return (float)_fit.size(); 
    } 

    Fitness* ParseFitness(ifstream& file); 

    // Remueve caracteres vacios al principio y fin de la cadena 
    string& TrimString(string& str); 
}; 

Configuración .cpp

Configuracion::~Configuracion() 
{ 
    //////////////////////////////////////////////// 
    for (hash_map<float, Fitness*>::iterator it = _fit.begin(); it != _fit.end();  it++) 
     delete (*it).second; 
} 

void Configuracion::ParseFile(char* fileName) 
{ 
    // Limpia objetos previamente analizados 
    _fit.clear(); 

    string line; 
    while(input.is_open() && !input.eof()) 
    { 
     // Leer linea por linea hasta que se obtenga el inicio de un nuevo objeto 
     getline(input, line); 
     TrimString(line); 

     // Lee, analiza y guarda el tipo de objeto 
     if (line.compare("#fit") == 0) 
     { 
      Fitness* f = ParseFitness(input); 

      if (f) 
       _fit.insert(pair<float, Fitness*>(f->GetFit(), f)); 

     }//////////////////cambiar variable o modificar  
    } 

    input.close(); 
    _isEmpty = false; 

Zur Verwendung des Wert der Variablen in einer anderen Datei innerhalb einer anderen Klasse:

float f1 = 0.000000; 
//f1 = Configuracion::GetInstance().GetFit(); 

f1 =(&Configuracion::_fit); 

//Horario * f1= &Configuracion::_fit; 
if (best->GetFitness() >= 0.45000000) 
{ 
    // ... 
} 

In dieser Linie habe ich einen Fehler:

f1 =(&Configuracion::_fit); 

Dies ist der Fehler:

Error 2 error C2440: '=' : cannot convert from 'stdext::hash_map<float,Fitness *,stdext::hash_compare<_Kty,std::less<_Kty>>,std::allocator<std::pair<const _Kty,_Ty>>> Configuracion::* ' to 'float' 
+1

Sie müssen Ihren Code richtig einrücken. Ohne richtige, logische Einrückung ist es schwer zu folgen. –

+0

Der Fehler ist ziemlich klar ... 'Configuracion :: _ fit' ist kein' float' Typ. Außerdem ist es nicht einmal ein statisches Mitglied – WhiZTiM

+0

'Fitness :: _ fit' ist ein' float'. 'Configuracion :: _ fit' ist ein' stdext :: hash_map >, std :: allocator >> 'oder ein' stdext :: hash_map 'kurz. '& Configuracion :: _ fit' ist ein Zeiger-zu-Stab-Daten für den zweiten Typ. Ich glaube nicht, dass Sie einen Pointer-zu-Member-Daten in einen Float konvertieren möchten. –

Antwort

0

Nun, es gibt zwei große Probleme mit dieser Linie:

f1 =(&Configuracion::_fit); 

Zunächst ist _fit ein nicht-statisches Mitglied der Klasse Configuracion, was bedeutet, dass Sie nicht darauf zugreifen können, wenn Sie nicht auf eine Instanz von Configuracion verweisen. Zum Beispiel:

Configuracion myConfiguracion; // Create instance of Configuracion. 

f1 = myConfiguracion._fit;  // Access member variable. 

Zweitens hat Configuracion::_fit den Typ hash_map<float, Fitness*>. Sie können ein hash_map-Objekt nicht einem float zuweisen, da ihre Typen nicht kompatibel sind. Es ist schwierig zu sehen, was Sie erreichen wollen, also kann ich Ihnen nicht sagen, wie Sie es beheben können. Sie sollten die betreffende Funktion neu bewerten und entsprechend korrigieren.

Verwandte Themen