[解決済み] 非メンバー関数での '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){
関連
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] 仮想デストラクタはいつ使うのか?
-
[解決済み] コールバック内で正しい `this` にアクセスする方法
-
[解決済み] AngularJS コントローラにおける 'this' と $scope の比較
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】識別子 "string "は未定義?
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】変数やフィールドがvoid宣言されている