为什么提示类未定义

时间:2021-08-27 09:29:33
本人刚开始学习VC++
按照《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,这样容易理解

#2


名称没有错:
// Show.h : header file
昨天我也估计这个名称有问题,改成MyShow之后错误提示依旧存在
Show的定义为:
class Show : public CDialog
{
}

#3


是否包含了头文件?

#4


在CHelloWorldDialogDlg.cpp中
#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阿

#7


Show   m_DialogHelloWorld;
这句改成//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"

#9


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

#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"更好。并且,预编译头文件还有可以加快编译速度的好处。

#12


另外,要学会先包含stdafx.h   ,按需包含,最后用到的最后包含,添加到后面


#include   "stdafx.h"    //包含中,让这一行永远位于第一行
#include   "HelloWorldDialog.h" 
#include   "HelloWorldDialogDlg.h"  
#include   "Show.h" 

#1


Show应该是资源IDD_DIALOGSHOW的对话框类
那你可以仔细看看,Show这个类的头文件是Show.h吗?

//另外类名最好是这样的,比如CDlgShow,这样容易理解

#2


名称没有错:
// Show.h : header file
昨天我也估计这个名称有问题,改成MyShow之后错误提示依旧存在
Show的定义为:
class Show : public CDialog
{
}

#3


是否包含了头文件?

#4


在CHelloWorldDialogDlg.cpp中
#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阿

#7


Show   m_DialogHelloWorld;
这句改成//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"

#9


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

#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"更好。并且,预编译头文件还有可以加快编译速度的好处。

#12


另外,要学会先包含stdafx.h   ,按需包含,最后用到的最后包含,添加到后面


#include   "stdafx.h"    //包含中,让这一行永远位于第一行
#include   "HelloWorldDialog.h" 
#include   "HelloWorldDialogDlg.h"  
#include   "Show.h" 

相关文章