2016-11-21 56 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,因爲它們的類型不兼容。很難看到你想要達到的目標,所以我不能告訴你如何解決這個問題。您應該重新評估有問題的功能並相應地進行修復。

相關問題