2012-01-28 5 views
8

Ho lavorato su una classe e ho iniziato a scrivere tutto nello stesso file .cpp. Tuttavia, dopo un po 'ho potuto vedere la classe diventare sempre più grande quindi ho deciso di dividerlo in un file .h e .cpp.Uso non valido di "this" nella funzione non membro

lima gaussian.h: file di

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; 
} 

Tuttavia, non può ottenere questo per compilare. Provo a correre:

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

ma ottengo:

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 

Perché non posso usare questo ?? Lo sto usando nella funzione fromPrecisionMean e che compila. È perché quella funzione restituisce un gaussiano? Ogni spiegazione in più sarà molto apprezzata, sto cercando di imparare il più possibile! Grazie!

risposta

23

Hai dimenticato di dichiarare absoluteDifference come parte della classe Gaussian.

Cambio:

double absoluteDifference (Gaussian aux){ 

a questo:

double Gaussian::absoluteDifference (Gaussian aux){ 

Nota a margine: Potrebbe essere meglio passare per riferimento invece che per valore:

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

ah! Non posso credere di non poterlo vedere! L'ho passato così tante volte ...! Grazie!! – coconut

+1

Inoltre, grazie per il consiglio in più! – coconut