dポイントプレゼントキャンペーン実施中!

最近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 スキップ ==========

この情報だけで、
何か間違いが見つかるんでしょうか。
なにせ超初心者なので、
何が何だかでパニックってます。

どうぞお力をお貸し下さい。

A 回答 (2件)

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> を追加してください
    • good
    • 0
この回答へのお礼

redfox63様へ

早速の回答ありがとうございました。

うまく走ることができました。

今、すごい感激です。
生まれて初めてプログラムを走らせたなんて♪

_Tマクロ、_TEXTマクロ
ってなんですか・・・ 

今持ってる参考書は
「明快入門Visual C++2005 ビギナー編」
なんですが、
そこに書いている通りに打ち込んでエラーがでたのです。

この本って、あまりよくないのでしょうか。
_Tマクロ、_TEXTマクロの事かいてないのですが・・・

質問攻めですいません。


とにかく、
走ったので、すごく嬉しいです。

お礼日時:2007/07/02 04:35

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 …
    • good
    • 0
この回答へのお礼

redfox63様へ

うーん。難しいですね。
といいますか、
初めてなので、
何が何だかという感じです。

とりあえず、コード体系の差の吸収ということは、
覚えました。

リンクありがとうございました。
でも、あまりよくわかりません。
どんどん勉強して、
分かるようになりたいと思います。

どうもありがとうございました。

お礼日時:2007/07/02 11:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!