かなりの初心者でございますm(__)m。
先日のことですが「Visual Studio .net 2003」から「Visual Studio 2005」へアップグレード(というよりは切り替え)を行いました。
すると2003では問題なくビルド出来たものが2005では「fatal error C1189」が出てしまい困っております。
エラーメッセージ
fatal error C1189: #error : Need to include strsafe.h after tchar.h
確かにtchar.hはインクルードしているので、これを文字通りに解釈して後にstrsafe.hをインクルードしたのですが、メッセージは変わらず(--;)。
どの辺りをチェックしたら良いか教えていただけると助かります。
OSはXP、VisualStudioのSP1はあてていません(エラーでSP1がインストール出来ないため)。
No.1
- 回答日時:
「Visual Studio 2005」はUNICODEを使うことがデフォルト設定になっているため、2003やVC6で作ったコードがそのまま通らないことが多いです。
試しに「メニュー」→「プロジェクト」→「<あなたのプロジェクト名>のプロパティ」→「構成プロパティ」→「全般」で「UNICODE文字セットを利用する」から「マルチバイト文字セットを利用する」に切り替えてコンパイルしてみてください。
ヘッダ関係を調査するより、こちらの方が早いと思います。
これで通ると良いのですが・・・。
回答ありがとうございます。
>「UNICODE文字セットを利用する」から「マルチバイト文字セットを
>利用する」に切り替えてコンパイルしてみてください
実はDirectxのDXUTを使ったプログラムなのです。DXUTがUnicodeが前提となっているためMBCSに出来ないのです(T_T)。
No.2
- 回答日時:
回答ありがとうございます。
リンク先を拝見しましたが、tchar.hをインクルードするにはstrsafe.hが必要で(これはtchar.hの中にそれっぽい部分がありました)、順番は「tchar.h、strsafe.h」としなければならないという回答ですね。
しかしこの順番でインクルードしてるのですが、同じエラーが出てしまうのです(--;)。
No.3ベストアンサー
- 回答日時:
C1189 はコンパイル指令 #error によるものらしいので
Fatal Error C1189 (C++)
http://msdn2.microsoft.com/en-us/library/y0tzt8e …
#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 を独自に取り込むようになっているファイルはないですね。
#まあ当然か
回答ありがとうございます。
>そうでもなければこのシンボルが定義されることはないように思うのですが
#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をインクルードしなくて済む様に)書き換えた方が早いでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Arduinoに関する質問 4 2023/08/07 21:19
- サーバー WindowsでApache が起動しない 1 2022/11/29 12:21
- その他(プログラミング・Web制作) python fbprophetについて 1 2022/09/29 19:44
- Windows 10 Visual StudioとVisual C++ Build Toolsについて 1 2023/04/16 03:42
- C言語・C++・C# visual studio 2019において、宣言していない変数があるのにエラーなくビルド出来ました 6 2023/03/08 16:32
- その他(パソコン・周辺機器) dvd書き込めない 5 2022/03/22 19:06
- Windows 10 VirtualBox 7のゲストOSでの物理HDDパーティションのマウント方法 2 2023/05/04 13:01
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- その他(プログラミング・Web制作) mariadbでのエラー 1 2022/11/15 12:31
- オープンソース Vue+Laravelのデザインテンプレートのサンプルが起動できない 1 2022/05/18 21:52
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
std::stringからLPCWSTR型への変換
C言語・C++・C#
-
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
-
4
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
5
多重定義が起きている?--lnk2005エラー:VC++
C言語・C++・C#
-
6
VC++ 2008 EXPRESS _T"識別子がみつかりません"
C言語・C++・C#
-
7
エディットボックスの入力制限について
C言語・C++・C#
-
8
error C2664: 'LPCTSTR' に変換できません。
C言語・C++・C#
-
9
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
10
CFileDialogの最初のディレクトリ設定
C言語・C++・C#
-
11
VC++で文字列から任意の文字を削除するにはどうしたらいいですか?
C言語・C++・C#
-
12
Debug Assertion Failed?
C言語・C++・C#
-
13
CString から LPCTSTRの型に変換
C言語・C++・C#
-
14
スタティックライブラリ関係のエラーだと思う...
C言語・C++・C#
-
15
画面を強制的に再描画させる方法
C言語・C++・C#
-
16
UpdateData( FALSE); による文字列データの表示更新(VC++6.0)
C言語・C++・C#
-
17
charからLPTSTRへの変換方法
C言語・C++・C#
-
18
CStringをwchar_tに変換したい
C言語・C++・C#
-
19
CStringの文字列検索&抜き出しについて
C言語・C++・C#
-
20
エラーの原因は?「この関数の定義が見つかりません」
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
1 つ以上の複数回定義されてい...
-
” OS ビルド ” の意味が分か...
-
<math.h>があるのにsqrtが・...
-
「fatal error C1189」を回避す...
-
必要なDBG ファイルが見つから...
-
Makefile作成時の拡張子.oとは?
-
動的な変数名のつけ方について
-
Microsoft の Visual C++ サン...
-
外部シンボル "_main"は未解決です
-
クリティカルエラー Expressio...
-
2G以上のファイル操作
-
Borland C Builder とOpenCVを...
-
C++/CLIで、アンマネージC++のD...
-
アプリケーションの配布
-
VC60とVC70の違いは?
-
VMwareのLinuxでコンパイルでき...
-
複数のサブディレクトリを一緒...
-
コンパイルエラー
-
NOTIFYICONDATAについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
<math.h>があるのにsqrtが・...
-
” OS ビルド ” の意味が分か...
-
Makefile作成時の拡張子.oとは?
-
「fatal error C1189」を回避す...
-
1 つ以上の複数回定義されてい...
-
ILSpyで、デコンパイルできない。
-
C言語でヘッダファイルにグロー...
-
エクセルVBAではRound...
-
セミコロンについて
-
マクロ コンパイルがグレーバック
-
C++コンパイル時に『 C1083: in...
-
外部シンボル "_main"は未解決です
-
PRO*C コンパイルエラー
-
コンパイルエラー:ユーザ定義...
-
クリティカルエラー Expressio...
-
ビルドとリビルドの違いを教え...
-
RPGでプログラムからソースファ...
-
戻り値について
-
C++のhppファイルをCでinclude
おすすめ情報