![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
最近VisualStudio2005でC++を勉強しているものです。
そこで、まずは画面に「Hello, Visual C++」と表示させる
プログラムを参考書通りに書き換えたつもり(?)なのですが、
エラーがでます。
どなたか理由を教えてください。人生初のC++で出だしからつまづくなんて・・・
以下がそのプログラムです。
// helloVCView.cpp : ChelloVCView クラスの実装
//
#include "stdafx.h"
#include "helloVC.h"
#include "helloVCDoc.h"
#include "helloVCView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// ChelloVCView
IMPLEMENT_DYNCREATE(ChelloVCView, CView)
BEGIN_MESSAGE_MAP(ChelloVCView, CView)
// 標準印刷コマンド
ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
END_MESSAGE_MAP()
// ChelloVCView コンストラクション/デストラクション
ChelloVCView::ChelloVCView()
{
// TODO: 構築コードをここに追加します。
}
ChelloVCView::~ChelloVCView()
{
}
BOOL ChelloVCView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: この位置で CREATESTRUCT cs を修正して Window クラスまたはスタイルを
// 修正してください。
return CView::PreCreateWindow(cs);
}
// ChelloVCView 描画
void ChelloVCView::OnDraw(CDC* pDC)
{
ChelloVCDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: この場所にネイティブ データ用の描画コードを追加します。
pDC->TextOut(0, 0, "Hellow, Visual C++");
}
// ChelloVCView 印刷
BOOL ChelloVCView::OnPreparePrinting(CPrintInfo* pInfo)
{
// 既定の印刷準備
return DoPreparePrinting(pInfo);
}
void ChelloVCView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 印刷前の特別な初期化処理を追加してください。
}
void ChelloVCView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 印刷後の後処理を追加してください。
}
// ChelloVCView 診断
#ifdef _DEBUG
void ChelloVCView::AssertValid() const
{
CView::AssertValid();
}
void ChelloVCView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
ChelloVCDoc* ChelloVCView::GetDocument() const // デバッグ以外のバージョンはインラインです。
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(ChelloVCDoc)));
return (ChelloVCDoc*)m_pDocument;
}
#endif //_DEBUG
// ChelloVCView メッセージ ハンドラ
これでデバッグすると、
以下の文言が・・・
------ ビルド開始: プロジェクト: helloVC, 構成: Debug Win32 ------
コンパイルしています...
helloVCView.cpp
c:\documents and settings\hellovc\hellovc\hellovcview.cpp(56) : error C2664: 'BOOL CDC::TextOutW(int,int,const CString &)' : 3 番目の引数を 'const char [19]' から 'const CString &' に変換できません。(新しい機能 ; ヘルプを参照)
理由: 'const char [19]' から 'const CString' へは変換できません。
class 'ATL::CStringT<BaseType,StringTraits>' のコンストラクタが 'explicit' と宣言されています。
with
[
BaseType=wchar_t,
StringTraits=StrTraitMFC_DLL<wchar_t>
]
ビルドログは "file://c:\Documents and Settings\helloVC\helloVC\Debug\BuildLog.htm" に保存されました。
helloVC - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========
========== 配置: 0 正常終了、0 失敗、0 スキップ ==========
この情報だけで、
何か間違いが見つかるんでしょうか。
なにせ超初心者なので、
何が何だかでパニックってます。
どうぞお力をお貸し下さい。
No.1ベストアンサー
- 回答日時:
VS2005になって 作成したソリューション(プロジェクト)の規定の文字セットが Unicodeになっています
CDC::TextOutなど 文字列の引数を扱う場合
_Tマクロか、_TEXTマクロを使用するようにしましょう
void ChelloVCView::OnDraw(CDC* pDC)
{
ChelloVCDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: この場所にネイティブ データ用の描画コードを追加します。
// この部分の 文字定数を _TEXTで括ります
pDC->TextOut(0, 0, _TEXT("Hellow, Visual C++"));
}
もし _TEXTが未定義だといわれるようなら
ファイルの先頭付近の
#include "afxstd.h" の次の行に
#include <TCHAR.H> を追加してください
redfox63様へ
早速の回答ありがとうございました。
うまく走ることができました。
今、すごい感激です。
生まれて初めてプログラムを走らせたなんて♪
_Tマクロ、_TEXTマクロ
ってなんですか・・・
今持ってる参考書は
「明快入門Visual C++2005 ビギナー編」
なんですが、
そこに書いている通りに打ち込んでエラーがでたのです。
この本って、あまりよくないのでしょうか。
_Tマクロ、_TEXTマクロの事かいてないのですが・・・
質問攻めですいません。
とにかく、
走ったので、すごく嬉しいです。
No.2
- 回答日時:
MicrosoftのOSで使用される文字コード体系が2種類あることはご存知でしょうか?
DOSやWin3.1、Win9x系で主に使用されてきた文字コード ANSIとかSBCS,MBCSといったコード体系と
WinNT,Win2000,WinXP,VISTAなどで用いられる Unicode
この2つのコード体系の差を吸収するためのマクロということになります
下記URLなどを一読してみましょう
参考URL:http://msdn.microsoft.com/library/ja/vccore/html …
redfox63様へ
うーん。難しいですね。
といいますか、
初めてなので、
何が何だかという感じです。
とりあえず、コード体系の差の吸収ということは、
覚えました。
リンクありがとうございました。
でも、あまりよくわかりません。
どんどん勉強して、
分かるようになりたいと思います。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Visual Basic(VBA) 数式が消える 1 2023/03/19 16:55
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【gcc・cygwin】multiple defin...
-
既定のコンストラクタがありま...
-
C++にてtemplateで受け取った任...
-
gcc: incompatible pointer type
-
戻り値を返す関数の前に(void)...
-
DLLの関数呼び出しで引数がある...
-
プログラミング教えてください
-
静的でないメンバ関数の呼び出...
-
【VC++6.0】イベントハンドラ関...
-
C# KeyDownイベントでショート...
-
DirectInput でのエラー
-
[Visual C++ 6.0] コンパイル(...
-
ウインドウの移動禁止
-
PowerShellにてツリービュー入...
-
C/C++でのScene管理について
-
(void)0 はどんな意味ですか
-
int main()、void main()、void...
-
マルチメディアタイマー
-
H8/3052について
-
_beginthread()の使用について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
既定のコンストラクタがありま...
-
【gcc・cygwin】multiple defin...
-
Notepad++の関数リスト表示の変...
-
戻り値を返す関数の前に(void)...
-
ArduinoでMouse関数を使用して...
-
C++にてtemplateで受け取った任...
-
int main()、void main()、void...
-
多重定義が起きている?--lnk20...
-
C# KeyDownイベントでショート...
-
静的でないメンバ関数の呼び出...
-
VC++でGetKeyboardStateがうま...
-
C# Controls.Addで動的に配置し...
-
gcc: incompatible pointer type
-
void*型の配列について
-
const_castのつかいどころを教...
-
C言語 ① 5秒間 1秒間隔で点滅を...
-
(void)0 はどんな意味ですか
-
TimerProc コールバック関数を...
-
H8マイコンのシリアル通信につ...
-
DLLの関数呼び出しで引数がある...
おすすめ情報