我用vs直接创建的基于对话框的工程,生成的对话框有个ID,我在别的新建类里要用到对话框中的函数,我在那个类里引入了对话框类的头文件,之后编译就报错了,说,对话框的ID没有声明,怎么回事啊这是?

解决方案 »

  1.   


    // VideoDlg.h : 头文件
    //#pragma once
    #include "ocx1.h"
    #include "vsplayerctrl1.h"
    #include "EasySize.h"
    // CVideoDlg 对话框
    class CVideoDlg : public CDialog
    {
    // 构造
    public:
    CVideoDlg(CWnd* pParent = NULL); // 标准构造函数// 对话框数据
    enum { IDD = IDD_VIDEO_DIALOG }; void RecvEvent(char *recvBuf) ;
    protected:
    virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 void InitVideo() ; DECLARE_EASYSIZE 
    // 实现
    protected:
    HICON m_hIcon; // 生成的消息映射函数
    virtual BOOL OnInitDialog();
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg void OnSize(UINT nType, int cx, int cy) ;
    afx_msg HCURSOR OnQueryDragIcon();
    DECLARE_MESSAGE_MAP()
    public:
    COcx1 classA;
    COcx1 classB;
    COcx1 classD;
    CVsplayerctrl1 classE;
    COcx1 classF;
    CVsplayerctrl1 classT;
    DECLARE_EVENTSINK_MAP()
    void DoubleClickClassA(short nButton, short nShiftState, long fX, long fY);
    void DoubleClickClassB(short nButton, short nShiftState, long fX, long fY);
    void DoubleClickClassD(short nButton, short nShiftState, long fX, long fY);
    void ClickClassE();
    void DoubleClickClassF(short nButton, short nShiftState, long fX, long fY);
    void ClickClassT();
    afx_msg void OnBnClickedEPre();
    afx_msg void OnBnClickedELat();
    afx_msg void OnBnClickedTPre();
    afx_msg void OnBnClickedTLat();
    };
    之后我想在我的MySocket.cpp种调用#include "StdAfx.h"
    #include "MySocket.h"#include <fstream>#include "VideoDlg.h"using namespace std ;
    错误提示:
     error C2065: “IDD_VIDEO_DIALOG”: 未声明的标识符我刚才看了,和工程名字一样的那个类,也引用了VideoDlg.h这个文件,那个就没有错,呵呵
      

  2.   

    是不是两个类得互相包含了?试一下包含资源文件resource.h,或者将ID改成数字就是它得真实值
      

  3.   

    1>c:\documents and settings\administrator\my documents\visual studio 2005\projects\test\test\testdlg.h(15) : error C2065: 'IDD_TEST_DIALOG' : undeclared identifier
    1>c:\documents and settings\administrator\my documents\visual studio 2005\projects\test\test\a.cpp(13) : error C2352: 'CtestDlg::OnBnClickedOk' : illegal call of non-static member function根据你的说明 我测试了下 错误类型应该和你的一样:
    解决方法:
    你添加的类 函数声明如下
    void 你的类::函数名(dlg 对象  )
    {
       进行调用吧。
    }
      

  4.   

    resource.h中添加资源文件#define IDD_VIDEO_DIALOG   1009
      

  5.   

    enum { IDD = IDD_VIDEO_DIALOG };
    我是直接把IDD_VIDEO_DIALOG改成它得真实值,具体值你可以到resource.h查看
      

  6.   

    这个解决方法我还真没看懂
    我添加的类是socket类,在OnReceive函数中项调用dlg类中的butten函数,结果调用不了
    那现在我应该怎么改呢?谢谢你了,这么麻烦给我弄,呵呵!
      

  7.   

    互相包含了肯定是设计有问题咯解决的话,
    比如说classA和classB互相包含了可以在classA的头文件里申明一下classB
    在classA的cpp文件里引用classB的头文件classB同样这么做,倒是可以解决问题。
    不过我觉得你先可以试试加上 #include resource.h
    可能是没有包含资源文件的申明
      

  8.   


    资源文件中有了#define IDD_VIDEO_DIALOG 102
      

  9.   

    相互包含的问题,我都是在cpp文件中包含的,难道也能出现这样的问题么?
    我决的不应该啊,呵呵
      

  10.   

    我还想再问一下,大家,这个对话框的对象是在工程名的那个类中定义的,而且是在Init这个函数中,我想用这个对象来调用我的double click事件,所以我就要去声明他,这样我就需要给这个对象定义成一个全局变量,我做了,后来编译没有错误,运行的时候什么都没有出来的时候,发现我错了,
    错误:
    File : f:\dd\vctools\vc7libs\ship\atlmfc\include\afxwin1.inl
    Line : 24
    这个怎么解释一下啊?
      

  11.   

    把声明CWinApp继承类的头文件包含进来就行了,也就是以工程名命名的头文件,因为默认的资源头文件是在这个里面引入的