c++,フレンドクラスの使おうとすると認識できない型です、というエラー出る。Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。登録してこのコミュニティに参加するどなたでも質問していただけますどなたでも回答していただけます最もよい回答には賛成票が入り、最上位に上がりますホーム質問タグユーザーc++,フレンドクラスの使おうとすると認識できない型です、というエラー出る。416件0フレンドクラスでなぜ前方宣言をしてるのに認識できない型ですとコンパイルエラー出るのか教えてほしいです。fri{}コードを移動させるとコンパイル成功します。B;};は「BはAの全てのメンバを参照してよい」という意味です。他人classのメンバを実装したり宣言したりできるわけではありません。いう質問の意図に感じられます。6:02そうなのはわかるのですがなぜエラーになるかがわかりません。9:582エラーメッセージをよく読んでいますか?どの行でどんなメッセージが出ているかを読めば、大抵分かります。エラーメッセージは重要ですので、質問文に追記してください。それでも分からなければ、前方宣言について調べてみてください。票1そのエラーの原因はfriendとは関係がありません。}};メンバー関数fの中でbaseクラスを使っていますが、この段階では、baseという名前のクラスがあると宣言しているだけで、具体的に、baseにどんなメンバーがあるかは定義されていません。定義されていないのにメンバー変数tにアクセスしようとしているので、エラーになっています。コメント部分でにfriの定義を移動するとエラーがなくなるのは、コメントのところでは既にbaseが定義されているからです。別の解決方法として、fri::f()の中身をコメント部分に持ってくるという方法があります。x);};とし、メンバー関数の本体部分のコードをコメント部分に置きます。x.t;}いずれにせよ、tをアクセスするのは、baseの定義が終わった後でなければなりません。friendは、アクセス権を持たない外部のクラスや関数に、アクセスを許可するものです。アクセスを許可されても、どんなメンバーがあるか知らなければ、そもそもアクセスできません。関数の場合は、戻り値と引数さえわかれば十分です。呼び出し側が関数の本体に直接アクセスするわけではないからです。今回の場合は、クラスインスタンスの中身に直接アクセスしています。関数のプロトタイプと同じ考え方は、全くできません。0:321フレンドクラスを実用するってことは、つまりあるクラスのメンバを、フレンドクラスのメンバ関数中から使うということになるわけです。よってクラス定義の中でインラインに関数を書こうとすると必ずどっちかのメンバ定義が(その時点では)不可視ということになります。クラス定義中にはメンバ関数の宣言だけを書いて、両方のクラスの定義が明らかになったのちにメンバ関数の実装を書くしかありません。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。operator関数でエラーになる。メンバー関数内でクラスをnewしていないことの確認0可変長引数テンプレートメンバ関数へのポインタ。その引数が期待通りにならない。2015でcppがどのヘッダーを見ているか確認・変更する方法はありますか0クラスを使った例外処理0c++の純粋仮想について知りたいことがあります。0c++,return文でエラーの解決方がわからない。0派生クラスに基底クラスを代入させたい。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。