最近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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【gcc・cygwin】multiple defin...
-
ウインドウの移動禁止
-
C# Controls.Addで動的に配置し...
-
多重定義が起きている?--lnk20...
-
戻り値を返す関数の前に(void)...
-
関数ポインタについて
-
既定のコンストラクタがありま...
-
(void)0 はどんな意味ですか
-
H8マイコンのシリアル通信につ...
-
DLLの関数呼び出しで引数がある...
-
マルチメディアタイマーの使用方法
-
TimerProc コールバック関数を...
-
コンパイルエラー
-
int main()、void main()、void...
-
C#でトーンカーブの作成
-
C言語 extern について
-
VC++でGetKeyboardStateがうま...
-
C++にてtemplateで受け取った任...
-
アルディーノ初心者です。 下記...
-
ドラッグしたときにマウスカー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【gcc・cygwin】multiple defin...
-
C++にてtemplateで受け取った任...
-
戻り値を返す関数の前に(void)...
-
静的でないメンバ関数の呼び出...
-
多重定義が起きている?--lnk20...
-
既定のコンストラクタがありま...
-
C# Controls.Addで動的に配置し...
-
int main()、void main()、void...
-
void*型の配列について
-
(void)0 はどんな意味ですか
-
gcc: incompatible pointer type
-
C# KeyDownイベントでショート...
-
C言語 ① 5秒間 1秒間隔で点滅を...
-
Notepad++の関数リスト表示の変...
-
コールバックって・・・
-
マルチメディアタイマーの使用方法
-
_beginthreadにて発生するコン...
-
C#でラジオボタンを設定に記録...
-
VC++でGetKeyboardStateがうま...
-
typedef unsigned int UINT;が...
おすすめ情報