※参考までに『3週間完全マスターVisual C++ 6.0 』という本の「5日目」の部分を進めていて詰まってしまいました。
ビルドすると、下記のDialogsDlg.h中の「CMsgDlg m_dMsgDlg;」の辺りに対して
error C2146: 構文エラー : ';' が、識別子 'm_dMsgDlg' の前に必要です。
error C2501: 'CMsgDlg' : 識別名を宣言するのに、型が指定されていません。
error C2501: 'm_dMsgDlg' : 識別名を宣言するのに、型が指定されていません。
というエラーが出てしまいます。CMsgDlgというクラスはちゃんと作っていますし、構文的にも間違ってはいないと思うのですが、何がいけないのでしょうか?
説明が足りなければ補足します(見づらくてスミマセン)。
// DialogsDlg.h :
#if !defined(AFX_DIALOGSDLG_H__4772C7E5_F2C9_4E57_99B8_EF1D44426473__INCLUDED_)
#define AFX_DIALOGSDLG_H__4772C7E5_F2C9_4E57_99B8_EF1D44426473__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif
class CDialogsDlg : public CDialog
{
public:
CDialogsDlg(CWnd* pParent = NULL);
enum { IDD = IDD_DIALOGS_DIALOG };
CButtonm_cWhichOption;
CStringm_sResults;
protected:
virtual void DoDataExchange(CDataExchange* pDX);
protected:
HICON m_hIcon;
//{{AFX_MSG(CDialogsDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnExit();
afx_msg void OnYesnocancel();
afx_msg void OnAbortretryignore();
afx_msg void OnFileopen();
afx_msg void OnBcustomdialog();
afx_msg void OnBwhichoption();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:
CMsgDlg m_dMsgDlg;
};
#endif
No.2ベストアンサー
- 回答日時:
プロジェクトに含まれるすべてのソース中で、DialogsDlg.hがインクルードされているソースに関してMsgDlg.hのインクルードを追加しましたか?
m_dMsgDlgを呼び出しているところだけではありませんよ。
アドバイス有難う御座います。
ズバリ、おっしゃる通りでした。
"DialogsDlg.h"をインクルードしている .cpp ファイルが2つあったことに気付きませんでした。もうひとつの方にインクルード文を追加したところ、無事にコンパイルできました。(言い訳にしかなりませんが、参考にしていた本にはそういった旨の記述がなかったので、気付きませんでした。)
どうも有難う御座いました。助かりました。
No.1
- 回答日時:
ヘッダファイル(DialogsDlg.h)では無く、このヘッダファイルをインクルードしているソースファイル(.cpp)を見てください。
たぶん…
DialogsDlg.h を#includeする前にインクルードするべきヘッダファイルの#includeが抜けています。
この回答への補足
素早い回答、有難うござます。
確かに"DialogsDlg.h"内で使われているCMsgDlgというクラスの定義は"MsgDlg.h"という別なヘッダーファイルでされているのですが、そのインクルードの順番の妙についても、参考にしている本にはちゃんと記述してありまして、そこでも言われているようにソースファイルでのインクルードの順番はちゃんと
#include "MsgDlg.h"
#include "DialogsDlg.h"
にしてあります。
ちなみに、その後 CMsgDlg m_dMsgDlg; の宣言文をソースファイル内に持ってきてしまったらちゃんとコンパイルが通ったので、クラスの定義には問題はなく、やはり参照する順番や制限に問題があるのかと思うのですが、少なくとも上記にも書いた通りソースファイルでのインクルードの順番は間違っていないと思うのですが…。
ヘッダーファイル同士での参照は何か特別な記述がいるのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ウインドウの移動禁止
-
C# Controls.Addで動的に配置し...
-
C++にてtemplateで受け取った任...
-
静的でないメンバ関数の呼び出...
-
【gcc・cygwin】multiple defin...
-
マルチメディアタイマーの使用方法
-
int main()、void main()、void...
-
コンパイルエラー
-
関数ポインタについて
-
既定のコンストラクタがありま...
-
戻り値を返す関数の前に(void)...
-
メンバ関数(メソッド)をマル...
-
pictureboxの画像を削除するには?
-
多重定義が起きている?--lnk20...
-
Arduinoでコンパイルエラーにつ...
-
クラス間でのクラスの共有?
-
ドラッグしたときにマウスカー...
-
二重定義の回避法
-
C言語 ① 5秒間 1秒間隔で点滅を...
-
2÷3などの余りについて
マンスリーランキングこのカテゴリの人気マンスリー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;が...
おすすめ情報