トップページ > プログラム > 2015年12月08日 > BztczKM1

書き込み順位&時間帯一覧

17 位/142 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000000020013



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
47
スレを勃てるまでもないC/C++の質問はここで 24 [転載禁止]©2ch.net

書き込みレス一覧

スレを勃てるまでもないC/C++の質問はここで 24 [転載禁止]©2ch.net
46 :デフォルトの名無しさん[sage]:2015/12/08(火) 20:22:24.50 ID:BztczKM1
ヘッダ周りで混乱しています。ご教授おねがいします。
下のプログラムをそれぞれA.h, B.hのヘッダに書いて動作させるにはどうしたらいいでしょうか。


/*Aクラスの関数からBクラスのprivateメンバにアクセスする*/

class B;

class A {
int ia;
public:
void aFunc(B *b_ptr);
};

class B {
int ib;
public:
friend void A::aFunc(B *b_ptr);
};

void A::aFunc(B *b_ptr) {
b_ptr->ib;
}
スレを勃てるまでもないC/C++の質問はここで 24 [転載禁止]©2ch.net
47 :デフォルトの名無しさん[sage]:2015/12/08(火) 20:23:21.01 ID:BztczKM1
私が今書いているのが下のものです。
// A.h -----------------------------
#pragma once

#include "B.h"
class B;

class A {
int ia;
public:
void aFunc(B *b_ptr);
};

void A::aFunc(B *b_ptr) {
b_ptr->ib;
}
// -----------------------------------
// B.h -------------------------------
#pragma once

#include "A.h"
class A;

class B {
int ib;
public:
friend void A::aFunc(B *b_ptr);
};
// -------------------------------------
visual studio 2015で以下のエラーが出ています。
エラー C2248 'B::ib': private メンバー (クラス 'B' で宣言されている) にアクセスできません。 A.h 13行
エラー C2027 認識できない型 'A' が使われています。 B.h 9行
スレを勃てるまでもないC/C++の質問はここで 24 [転載禁止]©2ch.net
50 :47[sage]:2015/12/08(火) 23:52:34.51 ID:BztczKM1
>>49
ありがとうございます。

B.hではAクラスのメンバ情報が必要なのでA.hをインクルードして、
A.hではBクラスがあることが確認さえできればよいのでBクラスを前方宣言すればよいということですね。

A.hに定義を描いたのはファイルが少ない方が問題が簡単になるかと思ったからですが、
B.hをインクルードする必要がでてくるので返ってめんどうなんですね。

重ねて質問させていただきたいのですがこれが循環参照というものですか?
またA.hに定義を書いた場合エラーを回避する書き方はあるのでしょうか?


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。