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'
Sie müssen Ihren Code richtig einrücken. Ohne richtige, logische Einrückung ist es schwer zu folgen. –
Der Fehler ist ziemlich klar ... 'Configuracion :: _ fit' ist kein' float' Typ. Außerdem ist es nicht einmal ein statisches Mitglied – WhiZTiM
'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. –