• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:「fatal error C1189」を回避するには?)

fatal error C1189回避方法とは?

このQ&Aのポイント
  • 初心者によるVisual Studio .net 2003から2005へのアップグレードで、fatal error C1189が発生しています。
  • エラーメッセージは「fatal error C1189: #error : Need to include strsafe.h after tchar.h」と表示されます。
  • tchar.hをインクルードしているにもかかわらず、strsafe.hをインクルードしてもエラーは解消されません。

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

C1189 はコンパイル指令 #error によるものらしいので Fatal Error C1189 (C++) http://msdn2.microsoft.com/en-us/library/y0tzt8e0(VS.80).aspx #error Need to include strsafe.h after tchar.h というのを検索してみると、 vc/include/tchar.h に #ifdef _STRSAFE_H_INCLUDED_ #error Need to include strsafe.h after tchar.h #endif というのが見つかりました。 tchar.h, strsafe.hのほかにどんなファイルを includeしているか わかりませんが、間接的にでもどこかから strsafe.h をすでに 読みこんでしまっているということはありませんか? そうでもなければこのシンボルが定義されることはないように思うのですが。 ざっと見たところ、vc8/include と vc8/PlatformSDK/include には strsafe を独自に取り込むようになっているファイルはないですね。 #まあ当然か

ahirudac
質問者

お礼

回答ありがとうございます。 >そうでもなければこのシンボルが定義されることはないように思うのですが #ifdefと#ifndefを読み間違えました・・・orz。この大元?はDirectxのサンプルなのですが、最初の方にdxstdafx.hというヘッダファイルをインクルードしてまして、この中に以下の記述がありました(エラー制御?)。 #pragma warning( disable : 4996 ) // disable deprecated warning #include <strsafe.h> #pragma warning( default : 4996 ) これは「C4996を無効化してstrsafe.hをインクルードしてC4996を有効にする」ということだと思うのですが、ご指摘頂いたのがこれかなぁと。 しかしtchar.hをdxstdafx.hの前に持ってくると別のエラーが出てしまいまして、どうするか決めかねています。 確認のため、2003が入っている環境で再度ビルドしてみたところ、エラーは出ずにコンパイル出来るので、2005の仕様なのかなぁと思ったりもしているのですが・・・。 コードをさっさと(tchar.hをインクルードしなくて済む様に)書き換えた方が早いでしょうか?

すると、全ての回答が全文表示されます。

その他の回答 (2)

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

参考URLで同様の質問をしている方がおられますので、参考にしてみてください。

参考URL:
http://www3.realint.com/cgi-bin/tarticles.cgi?pointc2+7758
ahirudac
質問者

お礼

回答ありがとうございます。 リンク先を拝見しましたが、tchar.hをインクルードするにはstrsafe.hが必要で(これはtchar.hの中にそれっぽい部分がありました)、順番は「tchar.h、strsafe.h」としなければならないという回答ですね。 しかしこの順番でインクルードしてるのですが、同じエラーが出てしまうのです(--;)。

すると、全ての回答が全文表示されます。
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

「Visual Studio 2005」はUNICODEを使うことがデフォルト設定になっているため、2003やVC6で作ったコードがそのまま通らないことが多いです。 試しに「メニュー」→「プロジェクト」→「<あなたのプロジェクト名>のプロパティ」→「構成プロパティ」→「全般」で「UNICODE文字セットを利用する」から「マルチバイト文字セットを利用する」に切り替えてコンパイルしてみてください。 ヘッダ関係を調査するより、こちらの方が早いと思います。 これで通ると良いのですが・・・。

ahirudac
質問者

お礼

回答ありがとうございます。 >「UNICODE文字セットを利用する」から「マルチバイト文字セットを >利用する」に切り替えてコンパイルしてみてください 実はDirectxのDXUTを使ったプログラムなのです。DXUTがUnicodeが前提となっているためMBCSに出来ないのです(T_T)。

すると、全ての回答が全文表示されます。

関連するQ&A