我想在两个对话框中使用同一个类,结果include了两次这个类的头文件,结果编译通过了,连接时报错
  fatal error LNK1169: one or more multiply defined symbols found
 "public: __thiscall CSpreadSheet::CSpreadSheet(class CString,class CString,bool)" (??0CSpreadSheet@@QAE@VCString@@0_N@Z) already defined in EditExecl.obj
应该是说在两个obj文件中重复定义了类?如果不加,又说没有定义这个类,不能通过编译,请问如何解决,谢谢。

解决方案 »

  1.   

    应该这是违背一次定义的原则的,你先include一次试试看?
      

  2.   

    但是只在其中一个对话框中include的话,在另外一个对话框中就不能使用这个自定义的类阿
      

  3.   

    在.h中加上宏  #ifndef ... #define ... #endif;
      

  4.   

    anothervip(cadet) 的是标准做法,格式为:
    #ifndef _YOUR_INCLUDE_
    #define _YOUR_INCLUDE_(头文件主体)#endif
    其中_YOUR_INCLUDE_可以是你喜欢的其他符号
      

  5.   

    用extern的话,一样是不行阿。我是这样用的,在对话框的cpp文件中,extern class SS
    不可以阿。各位能解释清楚#ifndef 的写法吗?
      

  6.   

    #if !defined(AFX_BACKUPDATA_H__12CB1686_D72C_45A0_8419_1D4B2D408E23__INCLUDED_) 
    #define AFX_BACKUPDATA_H__12CB1686_D72C_45A0_8419_1D4B2D408E23__INCLUDED_(头文件)#endif简单的条件编译:第一次编译该头文件时没有define(AFX_BACKUPDATA_H__12CB1686_D72C_45A0_8419_1D4B2D408E23__INCLUDED_),此时!defined(AFX_BACKUPDATA_H__12CB1686_D72C_45A0_8419_1D4B2D408E23__INCLUDED_)为真, 则编译头文件代码。 
    再一次包含该头问件时,给文件已经编译,!defined(AFX_BACKUPDATA_H__12CB1686_D72C_45A0_8419_1D4B2D408E23__INCLUDED_)为False ,就不在编译头文件代码。
      

  7.   


    CSpreadSheet是个控件吧(不会是楼主自己写的吧)在生成EditExecl.obj
    的相关文件里 重复定义了CSpreadSheet::CSpreadSheet(class CString,class CString,bool)。
    并不是.h重复定义的问题。
    是生成了两个相同函数的实体,在连接的时候Link程序无法选择的问题。
      

  8.   

    如果是VC7,直接在头文件前面加一句#pragma once就可以了
      

  9.   

    CSpareadSheet确实是一个控件,类代码的实现也是在头文件中,应该是zhuzhufox(狐狸的小猪)所说的问题了,但是删除了中间文件好像还是不行阿
      

  10.   

    ServiceMain.obj : error LNK2005: "struct _COMPLETION_IO_OPERATION_HEAD  Completion_Operation_Head" (?Completion_Operation_Head@@3U_COMPLETION_IO_OPERATION_HEAD@@A) already defined in KernelProcess.obj