1. ホーム
  2. c++

[解決済み] 非メンバー関数での 'this' の無効な使用

2022-02-18 04:24:19

質問

あるクラスで作業をしていて、同じ .cpp ファイルにすべてを書き始めました。しかし、しばらくしてクラスがどんどん大きくなっていくのがわかったので、.hと.cppファイルに分割することにしました。

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関数で使っていて、それはコンパイルできます。その関数がガウスを返すからでしょうか?私はできるだけ多くのことを学ぼうとしています!どんな余分な説明でも本当に感謝されます。ありがとうございます。

どのように解決するのですか?

を宣言するのを忘れています。 absoluteDifference の一部として Gaussian クラスがあります。

変更する。

double absoluteDifference (Gaussian aux){

をこれに変更します。

double Gaussian::absoluteDifference (Gaussian aux){


サイドノート 値で渡すのではなく、参照で渡したほうがいいかもしれません。

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