//以下为MyHeadFile.h中内容
class A{
   .......
public:
   MyOpt();
   .......
}
//以下为Dlg1.Cpp中的内容
#include "MyHeadFile.h"
class CDlg1:public CDialog{
  ......
  A m_A;
  m_A.MyOpt();
  ......
  MyClassOpt1(){
      CDlg2 m_Dlg2;
      m_Dlg2.DoModal();
  }
  ......
}
//以下为Dlg2.Cpp中的内容       
#include "MyHeadFile.h"           //如果写这一行 编译是报告类A重复定义,否则报告类A没有被定义
class CDlg1:public CDialog{
  ......
  A m_A;
  m_A.MyOpt();
  ......
}
请问怎样才能让两个Dlg都能够使用类A

解决方案 »

  1.   

    在类A的头文件开头加上
    #pragma once
    或者用下面的格式把头文件的内容包起来:#ifndef __A__
    #define __A__//  contents of your header file#endif /*__A__*/
      

  2.   

    还是不行 我是这么写的:
    #pragma once
    class A{
       .......
    public:
       MyOpt();
       .......
    }
    //以下为Dlg1.Cpp中的内容
    #include "MyHeadFile.h"
    class CDlg1:public CDialog{
      ......
      A m_A;
      m_A.MyOpt();
      ......
      MyClassOpt1(){
          CDlg2 m_Dlg2;
          m_Dlg2.DoModal();
      }
      ......
    }
    //以下为Dlg2.Cpp中的内容       
    #include "MyHeadFile.h"           //Error
    class CDlg1:public CDialog{
      ......
      A m_A;
      m_A.MyOpt();
      ......
    }
    如果加上Error报告
    DLGZFT.obj : error LNK2005: "public: __thiscall A::MyOpt(void)" (??A@@QAE@XZ) already defined in Dlg1.obj
    如果不加Error行则报告
    C:\Program Files\Microsoft Visual Studio\MyProjects\Car\DLG2.cpp(54) : error C2065: 'A' : undeclared identifier
      

  3.   

    class A{
       .......
    public:
       MyOpt();
       .......
    };最后有个 分号 的
      

  4.   

    1.如pomelowu(羽战士)所说
      在类A的头文件开头加上
    #pragma once
    或者用下面的格式把头文件的内容包起来:#ifndef __A__
    #define __A__//  contents of your header file#endif /*__A__*/2.在cpp中对类A的成员函数MyOpt()作出定义
      

  5.   

    #if !defined(AFX_SHIPDLG_H__96749169_A00D_47A2_845D_1F5025B3C3E0__INCLUDED_)
    #define AFX_SHIPDLG_H__96749169_A00D_47A2_845D_1F5025B3C3E0__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    // ShipDlg.h : header file
    //class A{
       .......
    public:
       MyOpt();
       .......
    };
    #endif // !defined(AFX_SHIPDLG_H__96749169_A00D_47A2_845D_1F5025B3C3E0__INCLUDED_)
      

  6.   

    1、将两个对话框的类定义和变量函数声明放在H文件里,函数实体放在CPP里;
    2、在两个CPP文件里包含类A的H文件;
    3、在两个对话框的H文件的类声明前加一句:
    class a;
    就行。
      

  7.   

    一般为了防止重复包含的常用方法就是一楼的“战士”所说的至于
    DLGZFT.obj : error LNK2005: "public: __thiscall A::MyOpt(void)" (??A@@QAE@XZ) already defined in Dlg1.obj
    你有没有加载定义MyOpt函数的CPP文件啊另:可以尝试下clean 后 Rebuild all( 有时候有残留)
      

  8.   

    检查下A::MyOpt的实现是在那个文件中的?
      

  9.   

    谢谢~~syy64(太平洋),类在头文件中前置声明后就可以了