如何在另一个类中使用属​​于某个类的变量的值?

时间:2016-11-21 00:17:56

标签: c++

我有这个代码,所有内容都被.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 :(得分: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,因为它们的类型不兼容。很难看出你想要实现的目标,所以我无法告诉你如何修复它。您应该重新评估相关功能并相应地进行修复。