• 締切済み

MFCとSTLの併用

MFCとSTLの両方を使おうとしたところ、MFCのDEBUG NEWとSTLがかぶってしまうようで、デバッグ版のビルドにおいてエラーがでてしまいます。リリース版では問題ないようです。どのように解決したらいいのでしょうか。ぜひご教示ください。

みんなの回答

  • alfeim
  • ベストアンサー率58% (114/195)
回答No.1

わたしが以前やったときは確かPreCompileHeader周りの性でうまくBuildで着なかった記憶があります。 確か標準のProject設定ではafx何ちゃら.hまでプリコンパイルする設定だったと思うので、STL関連のInclude記述の位置を変えるか、PreCompileHeaderの設定を切ることで回避したような・・・ なにぶん過去の話なんでいまいちはっきり覚えてないので・・・ とりあえず試してみてはいかがでしょうか? # 最近MFCと戯れることがめっきり減ってますんで(笑)

akubiII
質問者

お礼

ご回答ありがとうございました。 STLのインクルードをstdafx.hの中にもってくることで自己解決しておりました。理由がいまいちピンとこないのですが、、

関連するQ&A

  • C++でSTLを使ったときのデバッグ方法

    STLを使ったときの効率の良いデバッグ方法を教えてください. STL使ったときのエラーメッセージが,何を言わんとしているのかが さっぱり分かりません. STLのソースをテンプレートで読み込んでるせいで, STLのソースに依存してるかのような非常に長くて分けのわからん エラーメッセージが出るのです. このような場合に,エラーの真の原因(どう考えても,テンプレートではなく, 私の未熟なSTLへの理解が原因でしょう)を突き止める方法はどのようなものが あるのでしょうか? 教えてください.

  • MFCに関する質問です。

    みなさん、はじめまして! VC2008でMFCアプリケーションプログラミングを始めて習うものですが、最初にソリューションファイルを作って何も書かない場合でビルドして、デバッグすると白いページが出てきますが、 OpenCVで画像処理の二値化のプログラムを書いて実行したら、ビルドしてエラーは発生しませんが、デバッグしてみると、「OLEの初期化に失敗しました。OLEのライブラリのバージョンが正しいことを確認してください」とのメッセージが出てきて、OKボタンを押すと、何も処理してくれません。 ネット上でいろいろ調べましたが、まだ解決できていません。 MFCについて、まだぜんぜんわからないので、上記のことをどう対処したらいいのかをご指導いただきたいです。 どうぞよろしくお願いします。

  • リビルド後に実行しようとするとビルド要求のメッセージが出る

    VC++6.0のMFCを使って開発しているアプリケーションがあります。そのアプリケーションをビルドする際に起きる問題についてです。 リビルドした後に実行ファイルを実行しようとすると「ビルドしますか?」というメッセージが出てきます。リビルドしたばかりなのに何故ビルドが必要なのかわかりません。それから、再ビルド時には全ソースファイルがコンパイルされているようですので、実行されるまで時間がかかってしまいます。 リビルドしたときにはコンパイルエラーや警告はありませんし、リビルド後には確かに実行ファイルは生成されています。「ビルドしますか?」のメッセージが出ても「はい」ボタンをクリックしてビルドが完了すれば実行ファイルが実行されます。この問題は開発当初からあった問題ではなく、あるときから突然起きた問題です。いつから起きた問題なのかはわかりません。ちなみに、この問題は「バッチビルド」を使って複数のコンフィグレーションをリビルドした時に起きるようです。1つのコンフィグレーション(実行したいコンフィグレーション)のみをリビルドした後にはこの問題は起きません。また、リリース版、デバッグ版ともにこの問題は起きます。 下記はメッセージの内容です。(英語版のVCなのでメッセージは英語です。) (xxxは実行ファイル名、aaa、bbb、cccはソースファイル名) ---------------------------------------------------- One or more files are out of date or do not exist. These files need to be build: .\Debug\xxx.bsc .\Debug\xxx.exe .\Debug\aaa.obj .\Debug\bbb.obj .\Debug\ccc.obj <more file ...> Would you like to build them? ---------------------------------------------------- 原因や解決方法をご存知の方、ご教授をお願い致します。 環境:Win2000(日本語版)、VC++6.0(英語版)、MFC

  • Visual C++ リンクエラー

    VC++でビルドすると、Debug版では、成功するのですが、Release版では、「error LNK2001: 外部シンボル "__CIpow" は未解決です」が出て、ビルドに失敗します。 どなたか、原因あるいは解決方法をご存知ありませんでしょうか? 因みに、OSはWindws2000 Professional VC++ 6.0です。

  • リリースビルドの作成

    VisualC++ 2005 Express Editionを使って、C言語の簡単なプログラムを作りました。コンパイルの際に出てくるエラーや警告は一切ない(デバッグモード、リリースモード両方)のですが、このリリースビルドをVC++をインストールしていないPCで実行しようとすると、「指定されたプログラムは実行できません。」と出て実行できません。コンパイルに使ったPCでは実行できます。 リリースビルドを作成の際、ツールバーにある"Debug"を"Release"に切り替えて、ソリューションをビルドしました。プロジェクトはWin32コンソールにして、空のプロジェクトから始めました。 なぜ、バイナリが実行できないのでしょうか? そもそも、リリースビルドの作成法はこれでいいのでしょうか?

  • 実行ファイル(.exe)が別のPCで実行できない

    お世話になります。 VC++で、MFCアプリケーションプロジェクトより ダイアログベースでアプリを作成したのですが、 その実行ファイル.exeを別のWindowsPCで 実行すると、 ”「MFC71.DLL」が見つからなかったため、このアプリケーションは開始できませんでした。アプリケーションをインストールしなおすことの問題は解決される場合があります。” というエラーメッセージが出て実行できません。 どのようにすれば、実行できるのでしょうか? また、Releaseモードでビルドした場合、 Debugモードでビルドしたときには、出なかった 「error LINK2019:未解決の外部シンボル・・・。」という エラーがでます。 どうぞよろしくお願い致します。

  • VC++でDeugモードOKで、Releaseモードのみでエラーが出る?

    マイクロソフトのVisualC++で テキストデータを処理するプログラミングしています。 (MFCは使っていません。) 使用してたプログラムの 一部の変数をクラス化しました。 数多くのエラーをかいくぐり、 Debugモードでは、 目的の演算を実行することができるようになりました。 ところが、 このプロジェクトをReleaseモードでビルド実行すると、 「trans1.exe の 0x0040d052 でハンドルされていない例外が発生しました : 0xC0000005: 場所 0x2eb11a94 に書き込み中にアクセス違反が発生しました。」 というエラーが出て止まってしまいます。 プロジェクトのプロパティ設定で、 ヒープ領域をDebugモードと 同じにしてみたりしたのですが、 状況は改善されません。 メモリの問題のような気がして、 配列の大きさ等をチェックしましたが、 問題なしでした。 プログラムを他の人が使えるように するためには、 Releaseモードが必要なので困っています。 どなたか、アドバイスかご教示お願いします。 デバッグ方法を教えて頂いても大変助かります。 よろしくお願いします。

  • デバッグ開始でbin\Releaseにファイルが作成されてしまう。

    デバッグ開始でbin\Releaseにファイルが作成されてしまう。 Visual Studio 2008でC#によるWindowsアプリケーションを作成しているのですが、デバッグ開始を実行するとbin\Releaseにexeファイルなどが作成されてしまいます。 ビルドするとbin\Releaseにexeファイルなどが作成されます。 デバッグ開始の実行でbin\Debugにexeファイルなどが作成され、ビルドするとbin\Releaseに作成されるようにしたいのですが、どうすれば良いですか? ちなみに***.vshost.exeはbin\Releaseに作成されます。 これもbin\Debugに作成されるようにしたいです。

  • GetTextExtentの動きが違う

    VC++2008でmfcによるグラフィックス系のアプリを開発しています。 ビューに文字列を描画する前にその幅を取得したく、 文字列入力用のエディットボックスに文字列を入力中にメモリデバイスコンテキストを作成し、 GetTextExtent関数を用いて取得しています。 しかし、Releaseビルドして実行したところ、Debug版で取得したサイズと違うため困っています。 例えばDebug版で1文字の幅が18、2文字で35となっているものが、 Release版だと28, 57になっていました。 幅を同じにするための解決案はございますでしょうか。

  • C++STLについての質問です。

    C++STLについての質問です。 Visual C++ 2008 Express Edition を使用してDirectXアプリケーションを 作成しています。 その折、std::listテンプレートを使用する機会があったのですが、このリストを 使用しますと、 リンクしています... LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 libcpmtd.lib(stdthrow.obj) : error LNK2019: 未解決の外部シンボル __CrtDbgReportW が関数 "void __cdecl std::_Debug_message(wchar_t const *,wchar_t const *,unsigned int)" (?_Debug_message@std@@YAXPB_W0I@Z) で参照されました。 libcpmtd.lib(xdebug.obj) : error LNK2019: 未解決の外部シンボル __malloc_dbg が関数 "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。 libcpmtd.lib(xdebug.obj) : error LNK2019: 未解決の外部シンボル __free_dbg が関数 "void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。 fatal error LNK1120: 外部参照 3 が未解決です。 とのエラーが吐かれます。 ネットで検索すると、ソリューション構成をDebugからReleaseにすれば良いとの記述が ありましたので、実行してみました。しかし、 リンクしています... error LNK2001: 外部シンボル "_D3DXCreateTextureFromFileExW@56" は未解決です。 error LNK2001: 外部シンボル "_D3DXCreateSprite@8" は未解決です。 error LNK2001: 外部シンボル "_D3DXGetImageInfoFromFileW@8" は未解決です。 error LNK2001: 外部シンボル "_Direct3DCreate9@4" は未解決です。 fatal error LNK1120: 外部参照 4 が未解決です とのエラーが吐かれてしまいました。 尚、コード生成モードは、マルチスレッド(/MT)で作成しています。 どなたか、この問題を解決する方法をご存知ないでしょうか? よろしくお願いします。