2016-11-21 58 views
-2

我有这段代码一切都是由.h文件和。 CPP:Fitness.h如何在另一个类中使用属​​于某个类的变量的值?

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) { } 

,并在那里我用它在这里是一类名为文件名为configuracion部分: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); 
}; 

Configuracion .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; 

要使用的变量在另一文件中的另一个类中的值:

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

f1 =(&Configuracion::_fit); 

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

在这一行我有一个错误:

f1 =(&Configuracion::_fit); 

这是错误:

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

您需要正确缩进您的代码。如果没有适当的逻辑缩进,它很难遵循。 –

+0

错误非常明显...... Configuracion :: fit不是float类型。此外,它甚至不是一个静态成员 – WhiZTiM

+0

'Fitness :: _ fit'是一个'浮动'。 'Configuracion :: _ fit'是一个'stdext :: hash_map >,std :: allocator >> ',或简称为'stdext :: hash_map '。 '&Configuracion :: _ fit'是第二种类型的指向成员数据的指针。我不认为你想要将一个指向成员的数据转换为一个浮点数。 –

回答

0

那么这条线有两个主要问题:

f1 =(&Configuracion::_fit); 

首先,_fitConfiguracion类的非静态成员,这意味着除非参考Configuracion的实例,否则不能访问它。例如:

Configuracion myConfiguracion; // Create instance of Configuracion. 

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

其次,Configuracion::_fit具有类型hash_map<float, Fitness*>。您不能将hash_map对象分配给float,因为它们的类型不兼容。很难看到你想要达到的目标,所以我不能告诉你如何解决这个问题。您应该重新评估有问题的功能并相应地进行修复。

相关问题