2012-01-28 37 views
8

Tôi đã làm việc trên một lớp học và bắt đầu viết mọi thứ trong cùng một tệp .cpp. Tuy nhiên, sau một thời gian tôi có thể thấy lớp học ngày càng lớn hơn nên tôi quyết định chia nó thành một tập tin .h và a .cpp.Sử dụng không hợp lệ 'this' trong chức năng không phải là thành viên

gaussian.h file:

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 file:

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

Tuy nhiên, tôi không thể có được điều này để biên dịch. Tôi cố gắng chạy:

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

Nhưng tôi nhận được:

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 

Tại sao tôi không thể sử dụng này ?? Tôi đang sử dụng nó trong hàm fromPrecisionMean và biên dịch. Có phải vì hàm đó trả về Gaussian không? Bất kỳ lời giải thích thêm nào cũng sẽ được đánh giá cao, tôi đang cố gắng học nhiều nhất có thể! Cảm ơn!

Trả lời

23

Bạn quên khai báo absoluteDifference là một phần của lớp học Gaussian.

Thay đổi:

double absoluteDifference (Gaussian aux){ 

này:

double Gaussian::absoluteDifference (Gaussian aux){ 

Side Lưu ý: Nó có thể là tốt hơn để vượt qua bằng cách tham khảo chứ không phải theo giá trị:

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

Ah! Tôi không thể tin rằng tôi không thể nhìn thấy nó! Tôi đã trải qua rất nhiều lần ...! Cảm ơn bạn!! – coconut

+1

Ngoài ra, cảm ơn bạn đã gửi thêm lời khuyên! – coconut

Các vấn đề liên quan