按照《Visual C++开发入门与编程实践》143页的示例作一个简单的对话框程序,内容大致如下:
创建基本对话框HelloWorldDialog,添加菜单IDR_MENU_SHOW,点击菜单出现另一个新对话框
新对话框是通过资源模版IDD_DIALOGSHOW定义的,最后添加菜单事件:
void CHelloWorldDialogDlg::OnMenuitem()
{
// TODO: Add your command handler code here
Show m_DialogHelloWorld;
if (IDOK==m_DialogHelloWorld.DoModal())
{
}
}
编译时提示4个错误:
...\HelloWorldDialogDlg.cpp(176) : error C2065: 'Show' : undeclared identifier
...\HelloWorldDialog\HelloWorldDialogDlg.cpp(176) : error C2146: syntax error : missing ';' before identifier 'm_DialogHelloWorld'
...\HelloWorldDialog\HelloWorldDialogDlg.cpp(176) : error C2065: 'm_DialogHelloWorld' : undeclared identifier
...\HelloWorldDialog\HelloWorldDialogDlg.cpp(177) : error C2228: left of '.DoModal' must have class/struct/union type
Error executing cl.exe.
请大家帮忙看看怎么回事?为什么出现'Show' : undeclared identifier呢?
这个文件前面添加了#include "Show.h"呀
12 个解决方案
#1
Show应该是资源IDD_DIALOGSHOW的对话框类
那你可以仔细看看,Show这个类的头文件是Show.h吗?
//另外类名最好是这样的,比如CDlgShow,这样容易理解
那你可以仔细看看,Show这个类的头文件是Show.h吗?
//另外类名最好是这样的,比如CDlgShow,这样容易理解
#2
名称没有错:
// Show.h : header file
昨天我也估计这个名称有问题,改成MyShow之后错误提示依旧存在
Show的定义为:
class Show : public CDialog
{
}
// Show.h : header file
昨天我也估计这个名称有问题,改成MyShow之后错误提示依旧存在
Show的定义为:
class Show : public CDialog
{
}
#3
是否包含了头文件?
#4
在CHelloWorldDialogDlg.cpp中
#include "Shou.h"
#include "Shou.h"
#5
#include "Shou.h"
#6
包含了阿
// HelloWorldDialogDlg.cpp : implementation file
//
#include "Show.h"
#include "stdafx.h"
#include "HelloWorldDialog.h"
#include "HelloWorldDialogDlg.h"
另外,问一下,为什么有HelloWorldDialog和HelloWorldDialogDlg,我只生成了一个IDD_HELLOWORLDDIALOG_DIALOG阿
// HelloWorldDialogDlg.cpp : implementation file
//
#include "Show.h"
#include "stdafx.h"
#include "HelloWorldDialog.h"
#include "HelloWorldDialogDlg.h"
另外,问一下,为什么有HelloWorldDialog和HelloWorldDialogDlg,我只生成了一个IDD_HELLOWORLDDIALOG_DIALOG阿
#7
Show m_DialogHelloWorld;
这句改成//Show m_DialogHelloWorld;
就好了
,这句只是注视说明而已
if (IDOK==m_DialogHelloWorld.DoModal())
{
}是显示对话框的代码
这句改成//Show m_DialogHelloWorld;
就好了
,这句只是注视说明而已
if (IDOK==m_DialogHelloWorld.DoModal())
{
}是显示对话框的代码
#8
#include "Show.h"
#include "stdafx.h"
#include "HelloWorldDialog.h"
#include "HelloWorldDialogDlg.h"
---------------------------------
在#include "stdafx.h"前面编译器默认为啥都不做
改为:
#include "stdafx.h"
#include "HelloWorldDialog.h"
#include "HelloWorldDialogDlg.h"
#include "Show.h"
#include "stdafx.h"
#include "HelloWorldDialog.h"
#include "HelloWorldDialogDlg.h"
---------------------------------
在#include "stdafx.h"前面编译器默认为啥都不做
改为:
#include "stdafx.h"
#include "HelloWorldDialog.h"
#include "HelloWorldDialogDlg.h"
#include "Show.h"
#9
Show m_DialogHelloWorld;
是定义类Show的一个对象阿,去掉了m_DialogHelloWorld就变成未定义了
是定义类Show的一个对象阿,去掉了m_DialogHelloWorld就变成未定义了
#10
包含了阿
// HelloWorldDialogDlg.cpp : implementation file
//
#include "Show.h"
#include "stdafx.h"
#include "HelloWorldDialog.h"
#include "HelloWorldDialogDlg.h"
另外,问一下,为什么有HelloWorldDialog和HelloWorldDialogDlg,我只生成了一个IDD_HELLOWORLDDIALOG_DIALOG阿
==========================================================
你的工程名叫HelloWorldDialog,是基于对话框的,你这个对话框默认的类就是HelloWorldDialogDlg
// HelloWorldDialogDlg.cpp : implementation file
//
#include "Show.h"
#include "stdafx.h"
#include "HelloWorldDialog.h"
#include "HelloWorldDialogDlg.h"
另外,问一下,为什么有HelloWorldDialog和HelloWorldDialogDlg,我只生成了一个IDD_HELLOWORLDDIALOG_DIALOG阿
==========================================================
你的工程名叫HelloWorldDialog,是基于对话框的,你这个对话框默认的类就是HelloWorldDialogDlg
#11
chunyuanlu正解,已经编译通过了
另外搜索到一些解释:
1.vc规定cpp文件中#include "stdafx.h"前面的东西是不会被编译的。
2.vc 下的编程都是以stdafx.h为基础的
3.#include "stdafx.h"之所以需要放在前面,是因为其中有几个头文件,是对
mfc库进行支持的,例如对cdialog类的声明。其实,不用#include "stdafx.h"也可以,但是需要把其中的几个对mfc库进行支持的头文件添加到所有需要的地方,如此一来,就非常麻烦,所以,还是使用 #include "stdafx.h"更好。并且,预编译头文件还有可以加快编译速度的好处。
另外搜索到一些解释:
1.vc规定cpp文件中#include "stdafx.h"前面的东西是不会被编译的。
2.vc 下的编程都是以stdafx.h为基础的
3.#include "stdafx.h"之所以需要放在前面,是因为其中有几个头文件,是对
mfc库进行支持的,例如对cdialog类的声明。其实,不用#include "stdafx.h"也可以,但是需要把其中的几个对mfc库进行支持的头文件添加到所有需要的地方,如此一来,就非常麻烦,所以,还是使用 #include "stdafx.h"更好。并且,预编译头文件还有可以加快编译速度的好处。
#12
另外,要学会先包含stdafx.h ,按需包含,最后用到的最后包含,添加到后面
#include "stdafx.h" //包含中,让这一行永远位于第一行
#include "HelloWorldDialog.h"
#include "HelloWorldDialogDlg.h"
#include "Show.h"
#include "stdafx.h" //包含中,让这一行永远位于第一行
#include "HelloWorldDialog.h"
#include "HelloWorldDialogDlg.h"
#include "Show.h"
#1
Show应该是资源IDD_DIALOGSHOW的对话框类
那你可以仔细看看,Show这个类的头文件是Show.h吗?
//另外类名最好是这样的,比如CDlgShow,这样容易理解
那你可以仔细看看,Show这个类的头文件是Show.h吗?
//另外类名最好是这样的,比如CDlgShow,这样容易理解
#2
名称没有错:
// Show.h : header file
昨天我也估计这个名称有问题,改成MyShow之后错误提示依旧存在
Show的定义为:
class Show : public CDialog
{
}
// Show.h : header file
昨天我也估计这个名称有问题,改成MyShow之后错误提示依旧存在
Show的定义为:
class Show : public CDialog
{
}
#3
是否包含了头文件?
#4
在CHelloWorldDialogDlg.cpp中
#include "Shou.h"
#include "Shou.h"
#5
#include "Shou.h"
#6
包含了阿
// HelloWorldDialogDlg.cpp : implementation file
//
#include "Show.h"
#include "stdafx.h"
#include "HelloWorldDialog.h"
#include "HelloWorldDialogDlg.h"
另外,问一下,为什么有HelloWorldDialog和HelloWorldDialogDlg,我只生成了一个IDD_HELLOWORLDDIALOG_DIALOG阿
// HelloWorldDialogDlg.cpp : implementation file
//
#include "Show.h"
#include "stdafx.h"
#include "HelloWorldDialog.h"
#include "HelloWorldDialogDlg.h"
另外,问一下,为什么有HelloWorldDialog和HelloWorldDialogDlg,我只生成了一个IDD_HELLOWORLDDIALOG_DIALOG阿
#7
Show m_DialogHelloWorld;
这句改成//Show m_DialogHelloWorld;
就好了
,这句只是注视说明而已
if (IDOK==m_DialogHelloWorld.DoModal())
{
}是显示对话框的代码
这句改成//Show m_DialogHelloWorld;
就好了
,这句只是注视说明而已
if (IDOK==m_DialogHelloWorld.DoModal())
{
}是显示对话框的代码
#8
#include "Show.h"
#include "stdafx.h"
#include "HelloWorldDialog.h"
#include "HelloWorldDialogDlg.h"
---------------------------------
在#include "stdafx.h"前面编译器默认为啥都不做
改为:
#include "stdafx.h"
#include "HelloWorldDialog.h"
#include "HelloWorldDialogDlg.h"
#include "Show.h"
#include "stdafx.h"
#include "HelloWorldDialog.h"
#include "HelloWorldDialogDlg.h"
---------------------------------
在#include "stdafx.h"前面编译器默认为啥都不做
改为:
#include "stdafx.h"
#include "HelloWorldDialog.h"
#include "HelloWorldDialogDlg.h"
#include "Show.h"
#9
Show m_DialogHelloWorld;
是定义类Show的一个对象阿,去掉了m_DialogHelloWorld就变成未定义了
是定义类Show的一个对象阿,去掉了m_DialogHelloWorld就变成未定义了
#10
包含了阿
// HelloWorldDialogDlg.cpp : implementation file
//
#include "Show.h"
#include "stdafx.h"
#include "HelloWorldDialog.h"
#include "HelloWorldDialogDlg.h"
另外,问一下,为什么有HelloWorldDialog和HelloWorldDialogDlg,我只生成了一个IDD_HELLOWORLDDIALOG_DIALOG阿
==========================================================
你的工程名叫HelloWorldDialog,是基于对话框的,你这个对话框默认的类就是HelloWorldDialogDlg
// HelloWorldDialogDlg.cpp : implementation file
//
#include "Show.h"
#include "stdafx.h"
#include "HelloWorldDialog.h"
#include "HelloWorldDialogDlg.h"
另外,问一下,为什么有HelloWorldDialog和HelloWorldDialogDlg,我只生成了一个IDD_HELLOWORLDDIALOG_DIALOG阿
==========================================================
你的工程名叫HelloWorldDialog,是基于对话框的,你这个对话框默认的类就是HelloWorldDialogDlg
#11
chunyuanlu正解,已经编译通过了
另外搜索到一些解释:
1.vc规定cpp文件中#include "stdafx.h"前面的东西是不会被编译的。
2.vc 下的编程都是以stdafx.h为基础的
3.#include "stdafx.h"之所以需要放在前面,是因为其中有几个头文件,是对
mfc库进行支持的,例如对cdialog类的声明。其实,不用#include "stdafx.h"也可以,但是需要把其中的几个对mfc库进行支持的头文件添加到所有需要的地方,如此一来,就非常麻烦,所以,还是使用 #include "stdafx.h"更好。并且,预编译头文件还有可以加快编译速度的好处。
另外搜索到一些解释:
1.vc规定cpp文件中#include "stdafx.h"前面的东西是不会被编译的。
2.vc 下的编程都是以stdafx.h为基础的
3.#include "stdafx.h"之所以需要放在前面,是因为其中有几个头文件,是对
mfc库进行支持的,例如对cdialog类的声明。其实,不用#include "stdafx.h"也可以,但是需要把其中的几个对mfc库进行支持的头文件添加到所有需要的地方,如此一来,就非常麻烦,所以,还是使用 #include "stdafx.h"更好。并且,预编译头文件还有可以加快编译速度的好处。
#12
另外,要学会先包含stdafx.h ,按需包含,最后用到的最后包含,添加到后面
#include "stdafx.h" //包含中,让这一行永远位于第一行
#include "HelloWorldDialog.h"
#include "HelloWorldDialogDlg.h"
#include "Show.h"
#include "stdafx.h" //包含中,让这一行永远位于第一行
#include "HelloWorldDialog.h"
#include "HelloWorldDialogDlg.h"
#include "Show.h"