2012-01-28 22 views
8

Tenía trabajando en una clase y comencé a escribir todo en el mismo archivo .cpp. Sin embargo, después de un tiempo pude ver que la clase se hacía cada vez más grande, así que decidí dividirla en .h y en archivo .cpp.Uso no válido de 'esto' en la función no miembro

archivo gaussian.h: archivo

class Gaussian{ 
    private: 
     double mean; 
     double standardDeviation; 
     double variance; 
     double precision; 
     double precisionMean; 
    public: 
     Gaussian(double, double); 
     ~Gaussian(); 
     double normalizationConstant(double); 
     Gaussian fromPrecisionMean(double, double); 
     Gaussian operator * (Gaussian); 
     double absoluteDifference (Gaussian); 
}; 

gaussian.cpp:

#include "gaussian.h" 
#include <math.h> 
#include "constants.h" 
#include <stdlib.h> 
#include <iostream> 

Gaussian::Gaussian(double mean, double standardDeviation){ 
    this->mean = mean; 
    this->standardDeviation = standardDeviation; 
    this->variance = sqrt(standardDeviation); 
    this->precision = 1.0/variance; 
    this->precisionMean = precision*mean; 
} 

//Code for the rest of the functions... 

double absoluteDifference (Gaussian aux){ 
    double absolute = abs(this->precisionMean - aux.precisionMean); 
    double square = abs(this->precision - aux.precision); 
    if (absolute > square) 
     return absolute; 
    else 
     return square; 
} 

Sin embargo, no puedo conseguir esto para compilar. Trato de ejecutar:

g++ -I. -c -w gaussian.cpp 

pero me sale:

gaussian.cpp: In function ‘double absoluteDifference(Gaussian)’: 
gaussian.cpp:37:27: error: invalid use of ‘this’ in non-member function 
gaussian.h:7:16: error: ‘double Gaussian::precisionMean’ is private 
gaussian.cpp:37:53: error: within this context 
gaussian.cpp:38:25: error: invalid use of ‘this’ in non-member function 
gaussian.h:6:16: error: ‘double Gaussian::precision’ is private 
gaussian.cpp:38:47: error: within this context 

Por qué no puedo usar esto ?? Lo estoy usando en la función fromPrecisionMean y eso se compila. ¿Es porque esa función devuelve un gaussiano? Cualquier explicación adicional será realmente apreciada, ¡estoy tratando de aprender todo lo que pueda! ¡Gracias!

Respuesta

23

Olvidó declarar absoluteDifference como parte de la clase Gaussian.

Cambio:

double absoluteDifference (Gaussian aux){ 

a esto:

double Gaussian::absoluteDifference (Gaussian aux){ 

Nota al margen: Tal vez sería mejor que pasar por referencia y no por valor:

double Gaussian::absoluteDifference (const Gaussian &aux){ 
+1

Ah! ¡No puedo creer que NO pudiera verlo! ¡Lo he pasado tantas veces ...! ¡¡Gracias!! – coconut

+1

¡Además, gracias por el consejo adicional! – coconut

Cuestiones relacionadas