2012-01-28 24 views
8

我曾在一个类上工作,并开始在同一个.cpp文件中写入所有内容。然而,过了一段时间,我可以看到班级越来越大,所以我决定把它分成一个.h和一个.cpp文件。在非成员函数中使用'this'无效

gaussian.h文件:

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

但是,我不能让这个编译。我尝试运行:

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

,但我得到:

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 

为什么我不能用这个?我在fromPrecisionMean函数中使用它并编译。是否因为该函数返回高斯?任何额外的解释将非常感激,我正在努力学习尽可能多!谢谢!

回答

23

您忘记声明absoluteDifference作为Gaussian类的一部分。

变化:

double absoluteDifference (Gaussian aux){ 

这样:

double Gaussian::absoluteDifference (Gaussian aux){ 

侧面说明:这可能是更好的参考,而不是按值传递:

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

啊!我无法相信我看不到它!我经历过很多次......!谢谢!! – coconut 2012-01-28 19:10:07

+1

另外,感谢您的额外建议! – coconut 2012-01-28 19:18:19

相关问题