如果在一个.cpp文件中直接和间接的#include了同一个.h文件两次,
该.h文件中包含自己定义的一个类,
运行的时候会提示重复定义的错误。
这种情况是否可以通过条件编译来防止?
有什么好的解决方法?具体该怎么做?
谢谢!

解决方案 »

  1.   

    #ifndef xxxxxxxx
    #defien xxxxxxxx
    #endif或
    #pragma once
      

  2.   

    如果在一个.cpp文件中直接和间接的#include了同一个.h文件两次,
    ===
    系统会自动处理的
    你看系统生成的头文件的前面
      

  3.   

    具体的是:
    我在MFC生成的文档和视图的头文件中都#include "chsv.h"
    而在chsv.h中我定义了一个Chsv类,
    结果是:
    Output Window
    Compiling...
    Motion.cpp
    e:\\myproject\motion\chsv.h(3) : error C2011: 'Chsv' : 'class' type redefinition
    MotionView.cpp
    e:\\myproject\motion\chsv.h(3) : error C2011: 'Chsv' : 'class' type redefinition
    Generating Code...
    Error executing cl.exe.Results
    Motion.exe - 2 error(s), 0 warning(s)
      

  4.   

    你是把Chsv类的定义了两次吧。好好检查一下看看。
      

  5.   

    你在Chsv的头文件上加上
    #ifndef _CHSV_H
    #define _CHSV_H
    .
    .这里加你的类
    .
    #endif
      

  6.   

    在视图类里定义就行了然后把你要用的成员变量定义为一个全局的让视图类全部都可以访问.
    其他类想用的话就用extend 加上你的定义就行啦.如:int f();这个定义在***view.cpp
    在其它的.cpp里就用extend int f();
      

  7.   

    to cheeralen(夏日香气):
    按照你所说的方法,
    #ifndef _CHSV_H
    #define _CHSV_H
    .
    .这里加你的类
    .
    #endif可以
    正确运行,
    但是语句不是很懂,能不能讲解一下,尤其是其中的_CHSV_H是指什么?
      

  8.   

    faint如果定义了_CHSV_H这个头文件就不在定义了
    如果没有定义这个头文件就定义_CHSV_H这个头文件
      

  9.   

    对不起,我的意思是——
    为什么写成_CHSV_H,而不是chsv.h?
      

  10.   

    你可以把_CHSV_H换成
    _H__67D82AEE_04A3_407B_B3F3_699451A5EF29__INCLUDED_想写什么写什么
      

  11.   

    #ifndef xxxxxxxx
    #defien xxxxxxxx
    #endif或
    #pragma once