- ベストアンサー
VC++でコンパイルエラーが出ますがお教えください。
初心者で申し訳なくおもいます。 下記のソースでコンパイルエラーが出ます。 // CnstDst.cpp : アプリケーション用のエントリ ポイントの定義 // #include "stdafx.h" //CnstDst クラス定義 class CnstDst { char sDat[80]; public: CnstDst(char *s); ~CnstDst(); }; CnstDst cd1("テストです"); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { // TODO: この位置にコードを記述してください。 MessageBox(NULL, "WinMainの入口", "WinMain", MB_OK); CnstDst cd2("テスト1"); MessageBox(NULL, "テスト2", "WinMain", MB_OK); return 0; } CnstDst::CnstDst(char *s) { lstrcpy(sDat, s); MessageBox(NULL, sDat, "コンストラクタ", MB_OK); } CnstDst::~CnstDst() { MessageBox(NULL, sDat, "デストラクタ", MB_OK); } コンパパイルエラーは下記です。 プロジェクト 'CnstDst - Win32 (WCE MIPSII_FP) Debug' 用の中間ファイルおよび出力ファイルを削除しています。 --------------------構成 : CnstDst - Win32 (WCE MIPSII_FP) Debug-------------------- リソースをコンパイル中... コンパイル中... StdAfx.cpp コンパイル中... CnstDst.cpp C:\Documents and Settings\中野\デスクトップ\テストフォルダ\CnstDst\CnstDst.cpp(22) : error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'char [14]' to 'const unsigned short *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast C:\Documents and Settings\中野\デスクトップ\テストフォルダ\CnstDst\CnstDst.cpp(24) : error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'char [9]' to 'const unsigned short *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast C:\Documents and Settings\中野\デスクトップ\テストフォルダ\CnstDst\CnstDst.cpp(31) : error C2664: 'wcscpy' : cannot convert parameter 1 from 'char [80]' to 'unsigned short *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast C:\Documents and Settings\中野\デスクトップ\テストフォルダ\CnstDst\CnstDst.cpp(32) : error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'char [80]' to 'const unsigned short *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast C:\Documents and Settings\中野\デスクトップ\テストフォルダ\CnstDst\CnstDst.cpp(36) : error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'char [80]' to 'const unsigned short *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast clmips.exe の実行エラー CnstDst.exe - エラー 5、警告 0 Microsoft eMbedded Visuai C++ Win32 WCE で行っております。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
文字の問題です。文字列はワイドバイトで扱われます。ですので、それに対応した形でコーディングする必要があります。 MessageBox(NULL, L"WinMainの入口", L"WinMain", MB_OK); TCHAR sDat[80]; TCHAR *s などとしてみてください。 #eMbedded Visual C++ は少ししか使ったことないんで、 #事情が違ってたらすみません。
その他の回答 (4)
- aris-wiz
- ベストアンサー率38% (96/252)
既に回答が幾つかでていますが、 これはUnicode版である関数をリンクしようとしている為に、 Const文字列として渡している文字列がワイドキャラクタに 変換できないというエラーです。 const文字列を直接指定する場合はTEXTマクロを使用します。 > MessageBox(NULL, sDat, TEXT("コンストラクタ"), MB_OK); TEXTマクロはTCHAR型などと同様、 マルチバイト環境・ユニコード環境をそれぞれマクロで スイッチできるマクロです。
お礼
アドバイス誠に有難う御座いました。 2バイト文字の件でした。 今後とも宜しくお願い致します。
- pick52
- ベストアンサー率35% (166/466)
>>ANo.2 あ、ちょっと間違えた。 エラーの意味をよく考えてください。 > CnstDst.cpp > C:\Documents and Settings\中野\デスクトップ\テストフォルダ\CnstDst\CnstDst.cpp(14) : error C2664: '__thiscall CnstDst::CnstDst(unsigned short *)' : cannot convert parameter 1 from 'char [11]' to 'unsigned short *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast CnstDst.cppの14行目の型が間違っているといっています。 > CnstDst cd1("テストです"); ↓ CnstDst cd1(L"テストです");
お礼
有難うございました コンパイルはエラーが取れました。 pick52さんのご回答の様に修正いたしました。 今後とも宜しくお願い致します。
- machongola
- ベストアンサー率60% (434/720)
こんにちは。 >>すみませんが最後のエラーは? ↓此処では? ×CnstDst cd2("テスト1"); ○CnstDst cd2(L"テスト1");
お礼
エラーが取れました。 アドバイス誠に有難う御座いました。 今後とも宜しくお願い致します。
- pick52
- ベストアンサー率35% (166/466)
ワイドキャラクタを使用する場合は型はcharではなくwchar_tです。 基本的にはchar型やwchar_t型を直接使用するのではなく設定によって 自動で切り替えられるLPTSTRというマクロを使用した方がいいでしょう。
お礼
アドバイス誠に有難う御座いました。 参考になります。 今後とも宜しくお願い致します。
お礼
アドバイス誠に有難う御座いました。 MessageBox(NULL, L"WinMainの入口", L"WinMain", MB_OK); TCHAR sDat[80]; TCHAR *s 等修正でエラーが取れました。 今後とも宜しくお願い致します。
補足
ソース下記のように変更しました。 パソコン環境ですがWIN XPで行っております。 // CnstDst.cpp : アプリケーション用のエントリ ポイントの定義 // #include "stdafx.h" //CnstDst クラス定義 class CnstDst { TCHAR sDat[80]; public: CnstDst(TCHAR *s); ~CnstDst(); }; CnstDst cd1("テストです"); int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { // TODO: この位置にコードを記述してください。 MessageBox(NULL, L"WinMainの入口", L"WinMain", MB_OK); CnstDst cd2(L"テスト1"); MessageBox(NULL, L"テスト2", L"WinMain", MB_OK); return 0; } CnstDst::CnstDst(TCHAR *s) { lstrcpy(sDat, s); MessageBox(NULL, sDat, L"コンストラクタ", MB_OK); } CnstDst::~CnstDst() { MessageBox(NULL, sDat, L"デストラクタ", MB_OK); } コンパイルエラーは1つになりました。 すみませんが最後のエラーは? 御教授お願いします。 --------------------構成 : CnstDst - Win32 (WCE x86) Debug-------------------- コンパイル中... CnstDst.cpp C:\Documents and Settings\中野\デスクトップ\テストフォルダ\CnstDst\CnstDst.cpp(14) : error C2664: '__thiscall CnstDst::CnstDst(unsigned short *)' : cannot convert parameter 1 from 'char [11]' to 'unsigned short *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast cl.exe の実行エラー CnstDst.exe - エラー 1、警告 0