• 締切済み

protectedで宣言されている... c++

現在 c++でウィンドウプログラムを作成中です。 ダイアログAとBがあり Aのソースの方で CBDlg(Bダイアログ) bdlg; // このあとにAソースでBダイアログの関数を呼び出したいため bdlg.xxx(); と定義すると protectedメンバにアクセスできません。 というように怒られてしまいます。 これは何が原因なのでしょうか? よろしくお願いします。

みんなの回答

回答No.1

そのままなのでは? 外からはpublicメソッドしか呼び出せません。 ご自分で追加したものであれば、用途を考えて、publicなメソッドに変えてみては。 意味がわからない場合は「アクセス指定子」について調べてみよう。

関連するQ&A

  • C++ protectedにアクセス不可

    C++でお聞きしたいことがあります。 初心者ですのでご容赦ください。 //基本クラス class a1 { protected: a1(); }; //派生クラス class a2 :public a1 { protected: a2():a1(){}; //継承先以外から作成されたくない int t; }; class a3 : public a2 //a2を継承 { public: a3(); ~a3(); private: a2* a; //a2のポインタを持つ }; a3::a3() { t = 3; a = new a2; //コンストラクタの中でnew } a3::~a3() { delete a; //終わったらdelete } int main(void) { a3 a; return 0; } というソースでa3はa2を継承しています。 ですのでa2のprotectedメンバtにアクセスできるはず。 ここまではいいのですが、 a2のコンストラクタもa3でアクセスでき無いのでしょうか? a3のコンストラクタでnewしようとすると error C2248: 'a2::a2' : protected メンバ (クラス 'a2' で宣言されている)にアクセスできません。 a2::a2' の宣言を確認してください。 というエラーが発生します。 やりたいのはa2のような基本クラスが6つほどあり、 a2のメンバ変数が多いので コンストラクタの引数で指定されたものだけ コンストラクタないでnewしたいのです。 なぜ、できないのか? どうすればnewできるようになるのか…。 非常にお手数ですが、 どなたかご回答いただけませんでしょうか? 長文になりましたが、宜しくお願いいたします。

  • 用語の正式名称は?(C++)

    C++のクラスや構造体で、 class TEST { private: int a; //A int func1(); //B protected: int b; //C int func2(); //D public: int c; //E int func3(); //F } struct XXX { int x; //G } というのがあったとします。 //A~//G の正式な読み方はなんでしょうか? たとえば//Bなら、「プライベートメソッド」「プライベートメンバ関数」ですか? ご存知なかた、ご教授おねがいします。 できればその定義が書かれていた出所(URL)もおしえてください。

  • 修飾子 private protected

    Java での話です。 自分自身とサブクラスからのみアクセスできる変数は作成することはできないのでしょうか。修飾子 private protected の組み合わせは廃止されたようなのですが。 C++ だと、protectedで良かったと思うのですが、Java では同一パッケージからアクセスできるので戸惑ってしまいました。

    • ベストアンサー
    • Java
  • メインダイアログからの各ダイアログの呼び出し時に発生するエラーについて

    お世話になっています、fujitomoと申します。 現在、Visual C++のダイアログベースプログラムを作成しており、 メインダイアログから、各ダイアログ(計7つほど)にメッセージを送信したり、DoModal()で表示するために、メインダイアログのメンバ変数に各ダイアログのインスタンスを定義しました。 Ex) CSampleAClass A; CSampleBClass B; このように、定義し、いざメインダイアログからダイアログを呼び出そうとしたときに以下のようなメッセージのエラーが表示されました。 Unhandled exception at 0x40042c10 in Sample.exe: 0xC00000FD: Stack overflow. これはWindows CEのみのメッセージかもしれないのですが、たぶん言いたいことはスタックオーバーしてるよ、ということだと思います。 そこで、計7つのダイアログの定義を少なくして、6つにしたところ、上のエラーメッセージはでず、正常にダイアログが表示されました。 次にメンバ変数で各ダイアログのインスタンスを定義するのではなく、そのポインタを定義するようにプログラムを変更してみました。 Ex) CSampleAClass* A; CSampleBClass* B; このようにすると、計7つのダイアログをメンバ変数に定義してもエラーが発生せずに、正常にダイアログを表示させることが出来ました。 この理由はなぜでしょうか? C言語を始めて時間はたっているのですが、いまだにいまいちインスタンスのオブジェクトとそのポインタでの定義における違いがよく分かっていません。今回のことから、クラスをメンバ変数に定義するときはポインタで定義したほうがいいということなのでしょうか? ご参考となる意見がございましたら、ご意見宜しくお願い致します。 尚、開発環境は Windows CE 6.0 Visual Studio 2005 です。 宜しくお願い致します。

  • C++のクラス設計について

    Webや書籍をあたってみたのですが、なかなか解決しないので こちらで相談させいただこうと思い立ちました。 C++で書かれたプログラムを解析しているのですが、 ドキュメントは外部仕様書のみであとはソースコードだけ、という状態です。 コメントもほとんど書かれていないコードについて、リバースエンジニアリングを する必要があり、手始めにクラス図を作成してみました。 すると、複数のクラスでメンバ変数が重複しているのです。 クラスAに、クラスB・C・Dの変数の一部が宣言されていて、 クラスAとクラスBの間で重複している変数はすべてどちらのクラスもprotectedのstatic、 クラスAとクラスC・Dの間で重複している変数はクラスAではprotectedのstatic、 C・Dではprivateです。 クラスBとC・Dは継承関係にありますが、メンバ変数の重複はありません。 クラスAと他クラスは継承関係がなく、メンバ変数が多数重複しています。 クラスAの変数は20個ほどありますが、9割以上がB・C・Dで宣言されている変数と 重複している状態で、かつstaticのprotectedです。 Cはわかるのですが、C++はほとんど書いたことがありません。 アンチパターンなどもあたってみたのですが、上記のような設計についての記述は 見つけられませんでした。こういったクラス間での変数重複は「あり」なのでしょうか? これで情報が足りているかわかりませんが、何卒よろしくお願い致します。

  • 【Ruby】Protectedの確認プログラム

    こんにちは、Ruby初学者です。 以下の問題が解けずに困っています。「protectedが、メソッドをクラス内部から使えるようにする。また、同一クラス内ではインスタンスメソッドとしても使えるようにする。」という教科書的な内容は理解しているつもりでプログラムを書くのですが、どうも上手くいきません。 ヒントだけでも構いませんので、諸兄姉の知識をお貸しいただければ幸いです。 「protectedと宣言されたメソッドは、そのメソッドが定義されているクラスのサブクラスで定義されているメソッドから、メッセージの送信元とは異なるオブジェクトに対しても呼び出せることを確認するプログラムを作成し、結果を説明せよ。」 よろしくおねがいいたします。

    • ベストアンサー
    • Ruby
  • ソースファイルの分割について

    a.h クラスの定義 a.cpp クラスのメンバ関数の定義 b.h #include "a.h" クラスの定義 b.cpp クラスのメンバ関数の定義 ----c.cpp---- #include "a.h" #include "b.h" a.hで定義したクラスの宣言 b.hで定義したクラスの宣言 メインの処理 ----------------------------------------- b.cppで定義しているクラスのメンバ関数にて a.cppで定義したクラスのメンバ変数にアクセスしたいのです。 どうするのが一番良いのでしょうか? a.cppにメンバ変数を返すだけの関数を定義してb.cppでc.cppで宣言したa.hのクラスを extern宣言してみたのですがエラーが出てコンパイルが通らないです。

  • クラスの再定義について(C++)

    あるAというクラスを定義して適当にメンバ関数などを書いておいて、Bというクラスを定義するときに そのBの中でAの関数を使いたいときはどのようにすればいいのかわかりません。どうすればよいのでしょう? 勉強不足なものでどうぞよろしく。

  • c言語プログラミング

    main関数のほかに定義関数AとBを作ったのですが、 関数AからBを呼び出すとプログラムが動きません。 定義関数同士での呼び出しはできないのですか? できるのなら方法を教えてください。

  • SDKでのWinmain同時起動について

    windows SDKの話なんですが、二つのプロジェクトまたは同じプロジェクト内の二つのWinmain関数を起動することはできるのでしょうか? たとえばプロジェクトAとプロジェクトBがあり、プロジェクトAのWinmainから始まったプログラムがダイアログを作成しているとして そのダイアログのボタンを押すと、プロジェクトBのWinmain関数から始まったプログラムを起動するみたいなことなんてできるのでしょうか? 言葉たらずで申し訳ありませんが回答よろしくお願いします。 ちなみにVisual C++6.0を使用しています。

専門家に質問してみよう