• ベストアンサー

メンバー関数の追加に制限あり?

vc++ MFC SDI で開発している初心者です。 ClassViewウィンドウで「Cプロジェクト名View」 を右クリックし、メンバー関数の追加で、 関数の型をvoid、アクセス制御をprivate として関数を幾つか作成していったのですが、 51番目以降に作成した関数をClassViewウィンドウで ダブルクリックすると 「この定義(インプリメンテーション)が見つかりません。」 というメッセージが表示されます。 メンバー関数の追加には数の制限があるのでしょうか? どこかのパラメータを変えることでメッセージが表示されなくなるのでしょうか? ご存知の方がいらっしゃいましたら 教えていただきたいのでよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

一つのクラスの中で宣言できるメンバ数に関しては、4096個という処理系限界があります。ただし、これは最低限保証される個数なので、普通はメモリおよびソースコードの行数等が許す限り宣言可能だと思います。 ただ、(バージョンはわかりませんが)Visual C++は標準C++に完全準拠でしているわけではないので、こうした保証がないのかもしれませんし、もしかするとツールの限界なのかもしれません。または、(勘違い等)全く別の可能性も考えられます。 詳細についてはベンダーに問い合わせた方が確実です。

madamadahiyoko
質問者

お礼

お礼が遅くなってしまい申し訳ありません。連休後に再びメンバ関数をダブルクリックしたところ、正常にカーソルが移動しました。 何らかの原因でプログラムを管理しているところが書き換わらなかったのでしょうか?原因は不明ですが、今は問題なく動きます。 大変分かりやすい説明で本当に助かりました。 わざわざ回答していただきありがとうございました。

その他の回答 (1)

noname#11920
noname#11920
回答No.2

VC++であっても、恐らくコンパイラは標準のC++の規格に沿っているはずです。 ですから、コンパイルは出来るはずです。 問題はVC++のIDEが(標準よりも小さい)上限を持っている可能性は十分にあります。 下手にツールに頼るより、自分でコードを弄る方が賢明だと思います。 単純に「検索」すれば良いわけですから。

madamadahiyoko
質問者

お礼

お礼が遅くなってしまい申し訳ありません。連休後に再びメンバ関数をダブルクリックしたところ、正常にカーソルが移動しました。 何らかの原因でプログラムを管理しているところが書き換わらなかったのでしょうか?原因は不明ですが、今は問題なく動きます。 わざわざ回答していただきありがとうございました。

関連するQ&A

  • MSN メッセンジャー メンバー追加について

    windows live messengerを使っていますが なぜか急にメンバー追加ができなくなりました。 どういう症状かというと 相手にはこちらの状態(オンラインなど)は伝わるのですが こっちのリストは追加されません。 会話のウィンドウでも ****はメンバー リストに追加されていません。ここをクリックして、このメンバーをメンバー リストに追加します。 て表示されますが クリックしても何もおきません どなたかわかる方はいらっしゃいますか?

  • 継承元のpublicなメンバ関数を隠ぺいしたい

    C++です.(VC++2013) 親クラスではpublicで宣言されているメンバ関数があり,継承後はこのメンバ関数を隠ぺいしたいときはどのようにすればよいのでしょうか. 具体的には,std::vectorから派生したクラスを定義し,この独自クラスのインスタンスへ要素を追加する場合は,新しく独自に定義した関数を通じて行います. そのため,push_back()を呼べないようにしたいのです. 自分で作成した関数には,pushという名前をつけたいので,単純に自分の要素追加の関数をpush_backという名前でオーバーライドすることはできません. push関数内では,push_backした後,即座にsortしたいので,push_backをいう名前をつけたくないのです. とりあえずは,派生クラスでprivateにpush_backをオーバーライドし,自分で作った要素追加の関数で使うpush_backはstd::vectorのものを用いることを明示することでできました. 他にも何かやり方があれば,ご教授下さい.

  • Class Viewから見つかりません

    VC++6.0で、ClassViewからメンバ関数をダブルクリックすると、 実装されている箇所にジャンプすると思うのですが、 幾つかあるメンバ関数の中でジャンプしてくれず、 「この関数の定義(インプリメンテーション)が見つかりません。」 とメッセージが出てしまいます。 class hoge : public CListCtrl { public: void aaa( int a = 0, LPARAM lP= 0){int z = 0;} } 上記だとNGなのですが、aaa()の第一引数の部分を void aaa( int a, LPARAM lP= 0){int z = 0;} とするとOKとなってしまいます。 同じようなことを新しくプロジェクトを作って試してみると両方ともOKです。 いろいろと調べてみるとClass Viewなんてこんなものというぐらいしか 書かれていないようで、ある程度規模が大きくなると発生するのかもしれません。 が、もし何か対策が打てるようであればご教授願います。 よろしくお願い致します。

  • DLLでメンバ関数をエクスポートする方法

    VC++2005でDLLを作成しています。 そこで、クラスのメンバ関数をエクスポートする必要が出てきました。 クラスのメンバ関数を __declspec(dllexport) を使用せず、 DEFファイルを使用してエクスポートするには、 どのようにしたらよろしいでしょうか。

  • Viewウインドウに直接ボタンを貼り付けるには

    VC++6.0 APPWizard(exe) SDI で作成したViewウインドウにボタンを貼り付けたいのですが、どうすればよいか教えてください。 普通にダイアログにボタンを貼り付ける場合のように簡単ではないのですか?

  • エラーの原因は?「この関数の定義が見つかりません」

    <プログラム環境> Windows XP VC++6.0 MFC AppWizard(exe) ダイアログベース <症状> ヘッダー void Transmit(HANDLE,OVERLAPPED,unsigned char[],DWORD,CString); cppファイル void CMyDlg::Transmit(HANDLE hCom,OVERLAPPED old,unsigned char ucBuf[],DWORD dwByte,CString s) { } とコーディングしていて、ビルドも実行も全く問題ないのですが、 ClassViewでTransmit(HANDLE,OVERLAPPED,unsigned char[],DWORD,CString) をダブルクリックして、関数に移ろうとすると 『この関数の定義(インプリメンテーション)が見つかりません』 というエラーが出ます。 <質問> このエラーは何が原因で出ているのでしょうか?? 宜しければご指摘の程お願い致します。

  • Windows live messenger メンバーの追加

    Windows live messenger の メンバーの追加において 次の文章が出ますが「~(アドレス・・・@・・・.・・・) はメンバー リストに追加されていません。ここをクリックして、このメンバーをメンバー リストに追加します。」指示通りにクリックしても先に操作が進みません なにか 実施し忘れている操作があるのか 迷っています もちろん そのアドレスは間違いがありませんし 試しに他のパソコンからは 通信が出来ています 宜しくお願い致します。

  • ウインドウのビューをリストビューにするには?(VC++6.0)

    VC++6.0 MFCにて MFC AppWizardにてプロジェクトを作成します。 SDIを選択し、後はデフォルトのままです。 そうやって作ったベースとなるコードを実行すると、 普通にウインドウが開きます。(当然か) そのウインドウのビューをリストビューにしたいのですが、 どこにどのようなコードを書けば良いのでしょうか?

  • constのついたメンバ関数

     こんにちは。 C++を勉強しているのですが疑問に思ったことがあります。 const指定したメンバ関数にメンバ変数の変更をすることはエラーになるはずなんですが、 下記にある(*m_pRefCnt)++; はコンパイルが通るようです。 なぜこの一文だけ通るのでしょうか? 以下にソースを添付しておきます。 #include <iostream> class hogeClass { private: int* m_pRefCnt; int val; void AddRef() const { (*m_pRefCnt)++; // これはOK? val = 100; // これは駄目 } void Release() { } public: explicit hogeClass(char* src = NULL) : val(0) { } int& GetRefCnt() { return *(m_pRefCnt); } virtual ~hogeClass() { Release(); } }; int main() { int c = 435, k = 222; using namespace std; hogeClass a; getchar(); return 0; } 分かる人がいたらよろしくお願いします。

  • ドキュメントからビューを操作するには

    VC++ の MFI で SDI 使っています。 ドキュメントとビューがともに一つだけのとき、 ビューからドキュメントを操作するには   C○○○Doc* pDoc = getDocument(); で実現できます。 逆に、ドキュメントからビューを操作するには、どういう 関数を使えばよいのでしょうか。

専門家に質問してみよう