现在遇到一个比较烦的问题
例如一些结构以及很多常量我定义在一个单独的头文件A里
但是某些类要用到这些结构,所以在这些类各自的头文件里就包含了这个头文件A,
然后在另一个类里,我要包含上面说的的那些类的头文件,所以就产生了C2011重复定义错,请问有什么好办法解决。

解决方案 »

  1.   

    只在stdfx.h内包含A文件就可以了吧
      

  2.   

    只声明不定义.//---------file:a.h---------class ABase; //只声明ABase,但未定义ABase
    class A:public ABase
    {
    };//---------file:b.h---------#include "a.h"
    class ABase
    {
    };class B
    {
       A m_a;
    };
      

  3.   

    你试试看这样行不行?
    把你写的那个头文件,包含在stdafx.h里面
    然后在你需要使用哪些定义的时候,包含stdafx.h
      

  4.   

    #include "a.h"
    class ABase
    {
    };class B
    {
       A m_a;
    };
    #include "a.h"
    class ABase
    {
    };class B
    {
       A m_a;
    };
      

  5.   

    谢谢楼上的意见我把问题说具体点吧
    例如有一个结构
    struct mystr{
    int a;
    double b;
    }
    很多文件都会用到这个结构,现在这个结构放在a.h里现在
    b.h文件中
    #include "a.h"c.h文件中
    #include "a.h"然后在d.cpp中又有
    #include "b.h"
    #include "c.h"现在就有重复定义的错误了,应该怎么办?
      

  6.   

    原则 :尽量少在头文件中#include 其他文件
      

  7.   

    在每个头文件开始处加入
    #pragma once---------
      ++C++
    ---------
      

  8.   

    在头文件中,
    只能:
    (1)定义数据类型
      class
      struct
      deftype
    (2)声明函数
      void fun(int,int);
    (3)声明外部变量
      extern int x5;
    (4)定义常量宏
      #define
    (5)声明数据类型
      class MyClass;
    (6)const常量
      const double PI = 3.14159;不能:
    (1)定义变量 
       int x;
       MyClass* pClass;
    (2)定义函数
      void fun(int x,int y)
      {
         return;
      }
      

  9.   

    to FlyYang(++X++)
    你的做法是对的,不过我发现只需要在我定义那个结构的地方,也就是说上面
    我举的例子中的a.h中最前面加#pragma once就行了,其他的地方应该不用。to iicup(双杯献酒):
    我的确是在头文件中定义了struct呀,那就是对的呀,只是这个struct会被很多
    其他类的头文件用到,而这些类的头文件又在别的地方会一起include,所以才
    造成重复定义的问题。
      

  10.   

    一般头文件都只包含一次,
    典型的方法:#ifndef MY_FILENAME_H
    #define MY_FILENAME_H// 内容
    #endif // MY_FILENAME_H
      

  11.   

    #ifndef
    #define
    …………
    #endif