あるクラスのprivateメンバ、protectedメンバをほかのクラスで参照したいです。
参照するため、別クラスのポインタをメンバに持たせて
privateメンバにアクセスする方法を考えてみたのですが、クラス自体のプロトタイプ宣言について質問があります。
試しに以下のコードを書いてみましたが
1>c:\users\admin\desktop\aaa\aaa\aaa.cpp(22) : error C2512: 'foo' : クラス、構造体、共用体に既定のコンストラクタがありません。
1>c:\users\admin\desktop\aaa\aaa\aaa.cpp(23) : error C2027: 認識できない型 'foo' が使われています。
1> c:\users\admin\desktop\aaa\aaa\aaa.cpp(7) : 'foo' の宣言を確認してください。
1>c:\users\admin\desktop\aaa\aaa\aaa.cpp(23) : error C2227: '->show' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。
冒頭でfooクラスのプロトタイプ宣言をしているのですが、コンストラクタ無いよといわれています。
fooクラスをhogeクラスの前にボトムアップすれば普通に動くので良いのですが、プロトタイプ宣言しているのになぜ動かないのか疑問です。
ボトムアップせずに動かす方法とかはあるのでしょうか?
宣言方法などありましたら教えてください。お願いいたします
#include "stdafx.h"
//クラスのプロトタイプ宣言
class foo;
typedef struct{
int x,y;
}str;
class hoge{
private:
str s;
foo *f;//fooへの参照
public:
hoge(){
s.x = 10;
s.y = 20;
f = new foo();//fooのインスタンス化
f->show(&s);//fooにhogeのプライベートメンバの参照を渡してfooクラスでprintfする
}
};
//fooクラスを宣言
class foo{
public:
void show(str *);
foo();
~foo();
};
//コンストラクタ
foo::foo(){
}
//デストラクタ
foo::~foo(){
}
void foo::show(str *s){
//fooクラスからhogeクラスのprivateメンバにアクセス
printf("fooからアクセスしたhogeクラスのstr = s %d\n",s->x);
}
//main関数
int _tmain(int argc, _TCHAR* argv[])
{
hoge *hg = new hoge();
return 0;
}