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をインクルードしてもエラーは解消されません。
回答を見る
  • ベストアンサー

「fatal error C1189」を回避するには?

かなりの初心者でございます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がインストール出来ないため)。

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

  • ベストアンサー
  • 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

  • C2146を回避するにはどうしたら良いのでしょうか

    いつもここにお世話になってますm(__)m。今回は下記の様なエラーが出てしまい、困っております(--;)。 <エラー内容> 1>C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : error C2146: 構文エラー : ';' が、識別子 'PVOID64' の前に必要です。 1>C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません エラーが起こっているのはwinnt.h内の「typedef void * POINTER_64 PVOID64;」という部分なのですが(他にもありますが)、winnt.hは弄ってないのです。 ネットで検索したところインクルードファイルディレクトリの指定の順番が怪しそうなので、「ツール」「オプション」でPlatformSDK関連が一番上に来るように変更(実行可能ファイル、インクルードファイル、ライブラリファイル)してリビルドしてみましたが結果は変わりませんでした。 他にチェックすべき点をお教え頂けると助かります。 [環境] ・WindowsXP(SP2) ・Visual Studio 2005 Professional(C++、SPなし)

  • 粒子法プログラムのビルドエラー(cstdlibのエラー)

    粒子法のMPS法のプログラミングをしているのですが、C++でmps.cをビルドをすると、cstdlibのエラーが出てビルドが出来ません。 mps.cの本文中にはエラーは無く、visual studio 9.0にあるcstdlibの構文エラーが出てしまいます。 最初から入っているライブラリファイルが間違っているとは思えません。 解決法を教えてください。お願いします。 ↓ mps.c内でcstdlibを使っている場所 ↓ #include <cstdlib> /* This line is necessary for C++ compiler. Remove this line in C compiler */ #include <stdio.h> #include <sys/types.h> #include <math.h> #include <string.h> ↓ エラーメッセージ ↓ 1>コンパイルしています... 1>mps.c 1>c:\program files\microsoft visual studio 9.0\vc\include\cstdlib(21) : error C2143: 構文エラー : '{' が ':' の前にありません。 1>c:\program files\microsoft visual studio 9.0\vc\include\cstdlib(21) : error C2059: 構文エラー : ':' 1>c:\program files\microsoft visual studio 9.0\vc\include\cstdlib(21) : error C2143: 構文エラー : '{' が ':' の前にありません。 1>c:\program files\microsoft visual studio 9.0\vc\include\cstdlib(21) : error C2059: 構文エラー : ':' 1>c:\program files\microsoft visual studio 9.0\vc\include\cstdlib(21) : error C2143: 構文エラー : '{' が ':' の前にありません。 1>c:\program files\microsoft visual studio 9.0\vc\include\cstdlib(21) : error C2059: 構文エラー : ':' 省略(21行目のエラーが23~32行目まで同じエラーが続く) 1>MPS3000 - エラー 62、警告 0 ========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ==========

  • string.h内でエラー

    Visual C++ 2005でプログラムを組んでいます。 あるプログラムをビルドすると以下のようにstring.h内でエラーが大量に発生します。string.hをインクルードしないとエラーは出ないことからおそらくstring.hまわりの設定がおかしいとは思うのですがよくわかりません。 エラー 2 error C2144: 構文エラー : 'char' は ')' によって先行されなければなりません。c:\program files\microsoft visual studio 8\vc\include\string.h 136 エラー 3 error C2144: 構文エラー : 'char' は ';' によって先行されなければなりません。c:\program files\microsoft visual studio 8\vc\include\string.h 136 エラー 5 error C2143: 構文エラー : ';' が ',' の前にありません。c:\program files \ microsoftvisualstudio8 \ vc\ include\ string.h 136 宜しくお願いします。

  • visualstudio2012のエラーについて

    visual studio 2012 professinal の試用版をダウンロードして使おうとしているのですが、MFCアプリケーションを作れず、困っています。 まず、最初にプロジェクトを作成しようとすると"winres.h"というファイルを開けない、というエラーが表示されます。 「コードの編集」を行うとプロジェクトの作成はできるのですが、試しに一番最初の状態でソリューションをビルドしようとすると次は fatal error C1083: include ファイルを開けません。'winsdkver.h' と表示され、エラーが出てしまいます。 いろいろアップグレードしたりしてみたのですが、うまくいきません。 どうすればよいのでしょうか。

  • visual studio .NET→ Visual C++ 2005 Express Edition(pshpack2.h)

    visual studio .NETで問題なくコンパイルできたプログラムを 他のマシンのVisual C++ 2005 Express Editionで コンパイルするとビルドエラー fatal error C1083: include ファイルを開けません。'pshpack2.h': No such file or directory のメッセージです。 解決法を教えてください。

  • このエラーの意味は何でしょうか・・

    XP Pro VisualStudio2005Professional 何時からか、C++を含むヘッダをインクルードすると、以下のようなエラーが大量に出るようになったのですが、 1>c:\program files\microsoft visual studio 8\vc\include\cstdio(25) : error C2143: 構文エラー : '{' が ':' の前にありません。 どうしたらいいのでしょうか・・。

  • iostream インクルード時に発生するエラー

    C++ の勉強をするためにVisualStudio2008にて下記コードをビルドしたのですが、エラーが発生してビルドが失敗しました。 ■ コード #include <iostream> using namespace std; int main() { std::cout << "Hello World !"; return 0; } ■ 操作 空のコンソールアプリケーションを作成し、ソースファイルに追加>新しい項目 にて "temp.cpp" を追加、コードを入力。その後 ビルド > ソリューションのビルド を実行。 ■ エラー(一部) >> 「説明」 列 warning C4985: 'strlen': 前の宣言に属性が存在しません。 error C2039: 'wmemcpy_s' : '`global namespace'' のメンバではありません。 error C3861: 'wmemcpy_s': 識別子が見つかりませんでした error C2039: 'wmemmove_s' : '`global namespace'' のメンバではありません。 error C3861: 'wmemmove_s': 識別子が見つかりませんでした error C2039: 'memcpy_s' : '`global namespace'' のメンバではありません。 error C3861: 'memcpy_s': 識別子が見つかりませんでした error C2039: 'memmove_s' : '`global namespace'' のメンバではありません。 >>対応する「ファイル」列 d:\program files\microsoft visual studio 9.0\vc\include\exception d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd プロジェクトのプロパティやインストール時の構成などで何か問題があるのでしょうか。VisualStudio以外にはWindows SDK 、Windows SDK 6.0A、SQL Server2005などが導入されています。 再インストールするのもありかと思ったのですが、原因が分からないとまた同じ現象が発生しそうなため踏み切れません。 よろしくお願いします。

  • fatal error C1083: include ファイルを開けません というエラーが出ます

    初心者です。ソースは以下の通りです。 #include "stdafx.h" #include <cv.h> #include <highgui.h> #pragma comment(lib,"cv.lib") #pragma comment(lib,"cxcore.lib") #pragma comment(lib,"highgui.lib") int _tmain(int argc, _TCHAR* argv[]) { Ip1Image* img; //画像変数宣言 cvNamedWindow("画像表示"); // 表示ウィンドウの作成 img = cvLoadImage("Image.jpg"); //画像ファイルの読み込み if(img == NULL){ //ファイルが読み込めない場合 printf("ファイルが読み込めません。\n"); cvWaitKey(0); //キー入力待機 return -1; } cvShowImage("画像表示", img); //表示ウィンドウに画像を表示 cvWaitKey(0); //キー入力待機 cvDestroyWindow("画像表示"); //表示ウィンドウの破棄 cvReleaseImage(&img); //画像領域の解放 return 0; } 以上のソースをビルドすると、以下のようなエラーが出てしまって、うまくコンパイルすることができません。 1>------ ビルド開始: プロジェクト: ImageDisplay, 構成: Debug Win32 ------ 1>コンパイルしています... 1>ImageDisplay.cpp 1>c:\users\g031f096\documents\visual studio 2008\projects\imagedisplay\imagedisplay\imagedisplay.cpp(5) : fatal error C1083: include ファイルを開けません。'cv.h': No such file or directory 1>ビルドログは "file://c:\Users\g031f096\Documents\Visual Studio 2008\Projects\ImageDisplay\ImageDisplay\Debug\BuildLog.htm" に保存されました。 1>ImageDisplay - エラー 1、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== どのようにすれば通るのでしょうか?よろしくお願いします。開発環境は Visual C++ 2008 Express Editionです。

  • c++によるエラー

    ここ(http://japan.maxim-ic.com/products/ibutton/software/1wire/wirekit.cfm)のサイトの、1-Wire Public Domain Kit + examples + all link files + assembly language files これをDLし、その中にあるThermoを実行したいのですが、エラーが出てしまいます。 ソースファイルに Thermodl.c , Thermoms.c ヘッダーファイルに findtype.h , ownet.h , thermo21.h を入れてあります。 これを実行すると、以下のエラーが出てしまいます。 1>c:\documents and settings\administrator\my documents\visual studio 2010\projects\hiraki\hiraki\thermodl.c(11): error C2143: 構文エラー : ')' が '*' の前にありません。 1>c:\documents and settings\administrator\my documents\visual studio 2010\projects\hiraki\hiraki\thermodl.c(11): error C2143: 構文エラー : '{' が '*' の前にありません。 1>c:\documents and settings\administrator\my documents\visual studio 2010\projects\hiraki\hiraki\thermodl.c(11): error C2059: 構文エラー : '型' 1>c:\documents and settings\administrator\my documents\visual studio 2010\projects\hiraki\hiraki\thermodl.c(11): error C2059: 構文エラー : ')' 1>c:\documents and settings\administrator\my documents\visual studio 2010\projects\hiraki\hiraki\thermodl.c(114): warning C4013: 関数 'PrintResults' は定義されていません。int 型の値を返す外部関数と見なします。 1>c:\documents and settings\administrator\my documents\visual studio 2010\projects\hiraki\hiraki\thermodl.c(145): error C2371: 'PrintResults' : 再定義されています。異なる基本型です。 1> 1>ビルドに失敗しました。 visual studio2010の製品版を使っています。どのように修正すればよいでしょうか。 教えてください。

  • VC++ 2010 Expressのエラー

    visual C++ 2010 Expressでビルドエラーが解消できません。 VC++初心者です。非常に困っているので、お答えいただきたいです。 ARtoolkitとkinectを使用するために、windows8(64bit)でvisual C++ 2010 Expressを使用し、ビルドをしようとすると fatal error C1083: include ファイルを開けません。'windows.h': No such file or directory このようなエラーが表示されます。同様にexcpt.h、sdkddkver.h、stdio.h、stdlib.h、crtdefs.hもincludeできないとエラーが表示されます。 これらのファイルは全てC:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include の中に存在したため、このディレクトリをインクルードディレクトリとライブラリディレクトリに追加すると、includeファイルを開けないエラーは解消するのですが、 fatal error C1189: #error : ERROR: Use of C runtime library internal header file. というエラーが表示され、検索してみたものの原因がわからずにいます。 また既にvisual C++2008でARtoolkitを動かせる状態にしてあることも影響はあるのでしょうか? 大変わかりずらい質問で恐縮ですがお答えいただきたいです。

専門家に質問してみよう