【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード

vc++でプログラムを作っています。
クラスのアクセス制限の部分で疑問が出てきたので、ソースとその疑問について
下記に示しています。

const int CAMERA_NUMBER = 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. 何をやりたいのかわからん。や、定義書いてないやん。などの誹謗中傷はおやめください。心が傷つきます。

A 回答 (1件)

main 関数から ReferenceCameras の private メンバにアクセスしようとしているわけですから,当然ですよね。



この場合,CalculateMatrix が friend かどうかは関係ありません。

この回答への補足

なるほど、おっしゃるとおりです。

わざわざすみませんでした。

補足日時:2010/11/28 17:51
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!