none
又见: “error LNK2019: 无法解析的外部符号” 错误 RRS feed

  • 问题

  •    用VS 2008创建应用程序时,会在我的主程序文件 tscsmDlg.cpp创建 about 对话框 ,如下 :

     

    class CAboutDlg : public CDialog
    {
    public:
     CAboutDlg();

    // Dialog Data
     enum { IDD = IDD_ABOUTBOX };

     protected:
     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

    // Implementation
    protected:
     DECLARE_MESSAGE_MAP()
    };

    CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
    {
    }

    void CAboutDlg:Big SmileoDataExchange(CDataExchange* pDX)
    {
     CDialog:Big SmileoDataExchange(pDX);
    }

    BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
    END_MESSAGE_MAP()

     

    我想将该对话框定义放到另外的文件中定义:

    如:

    文件1  aboutdlg.h :

    class CAboutDlg : public CDialog
    {
    public:
     CAboutDlg();

    // Dialog Data
     enum { IDD = IDD_ABOUTBOX };

     protected:
     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

    // Implementation
    protected:
     DECLARE_MESSAGE_MAP()
    };

     

    文件2   aboutdlg.cpp

     

    #include "aboutdlg.h"

    CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
    {

    }

    void CAboutDlg:Big SmileoDataExchange(CDataExchange* pDX)
    {
     CDialog:Big SmileoDataExchange(pDX);
    }
     BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
     END_MESSAGE_MAP()

     

    同时将对话框的定义在 主程序文件tscsmDlg .cpp文件中注释掉,在该文件中增加头文件:

    #include "aboutdlg.h"

    然后按F7编译,报错如下:

     

    正在链接...
    tscsmDlg.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall CAboutDlg::CAboutDlg(void)" (??0CAboutDlg@@QAE@XZ),该符号在函数 "protected: void __thiscall CtscsmDlg:SurprisenSysCommand(unsigned int,long)" (?OnSysCommand@CtscsmDlg@@IAEXIJ@Z) 中被引用
    D:\tscsm\tscsm0701\Debug\tscsm.exe : fatal error LNK1120: 1 个无法解析的外部命令

     

    怎么解决???

     

    (似乎是手工在应用中添加添加类的定义有问题)

     



     

    2008年7月17日 6:00

答案

  •  

    1。有没有把aboutdlg.cpp 包含到项目中来?

     

    2。有没在 aboutdlg.cpp 加上预编译头文件(如果用到的话,默认是有的) #include "stdafx.h"  ?

     

    mfc中加类建议在类视图中右键--添加--新类,文件格式会自动建立,然后把你的东西覆盖进去就可以了。

    2008年7月17日 7:31

全部回复

  •  

    1。有没有把aboutdlg.cpp 包含到项目中来?

     

    2。有没在 aboutdlg.cpp 加上预编译头文件(如果用到的话,默认是有的) #include "stdafx.h"  ?

     

    mfc中加类建议在类视图中右键--添加--新类,文件格式会自动建立,然后把你的东西覆盖进去就可以了。

    2008年7月17日 7:31
  •  

     行了,谢谢 !

     

    弱弱的问一句:什么时候出VS2008 SP1 (中文版) .

    2008年7月17日 7:47