質問: 0 class calculatematrix{ public: □static bool computefundamentalmatrix( const cv::mat p1 , const cv::mat p2 , const cv::mat t1 , const cv::mat t2 , cv::mat &f ); }; class referencecameras{ □friend class calculatematrix; public: □referencecameras(); □void setp(); □void setc(); □void setsilhouette(); private: □cv::mat shilhouetteimage; □int index; □cv::mat p; □cv::mat c; □cv::mat f; }; void main(){ □referencecameras camera0; //この宣言でプライベートメンバのf以外に全て値が入ります □referencecameras camera1; // 〃 □calculatematrix::computefundamentalmatrix( cameras0.p, cameras1.p , cameras0.c , cameras1.c , cameras1.f ); } という感じで referencecameras型の camera0,camera1を作って そのcalculatematrix::computefundamentalmatrixの計算を行い。 camera1のfを計算する。 というのをやりたいのですが、main内のcalculatematrix:fundamentalmatrixに引数を入れる部分でエラーが出ていてprivateメンバにアクセスできませんと出ます。 普通なら private で宣言しているので、そういうエラーが出るのは当然かと思いますが、 フレンドクラスの設定をしているのに、このエラーが出るのが理解できません。 結構調べたんですが、フレンドクラス、フレンド関数の部分と静的関数、ユーティリティ関数について絡めて解説しているのはなかったので詰まっています。 どうかみなさんの力を貸してください。 p.s. 何をやりたいのかわからん。や、定義書いてないやん。などの誹謗中傷はおやめください。心が傷つきます。
回答: main 関数から referencecameras の private メンバにアクセスしようとしているわけですから,当然ですよね。 この場合,calculatematrix が friend かどうかは関係ありません。