在DLL中,有一个从CSocket继承的类A,在OnReceive函数中,调用另外一个类B的函数来处理收到的数据,该函数处理完后,要通过类A的函数,把数据发出去。
这样,在类A的头文件中,就引用了B的关文件,类B的头文件中,又包含了A的头文件,这就出现的嵌了,出错了。请问有什么解决办法?

解决方案 »

  1.   

    #pragma once在文件头加这个,只被包含一次
      

  2.   

    如果B只是调用A的函数的话,试试把include"A.H"放在B.CPP中A中如果有定义的数据结构或者类,B用的到的话,就在B.H中加个声明,但是不要定义出来不知道说明白了没
      

  3.   

    a) 分别定义ClassA和ClassB,并在cpp文件中实现之
    b) 在两个头文件的开头分别用class ClassB;和class ClassA;声明对方
    c) 在两个cpp文件中分别包含另外一个类的头文件
    NOTE:这种方法切记不可使用类名来定义变量和函数的变量参数,只可用来定义引用或者指针。
      

  4.   

    a) 分别定义ClassA和ClassB,并在cpp文件中实现之
    b) 在两个头文件的开头分别用class ClassB;和class ClassA;声明对方
    c) 在两个cpp文件中分别包含另外一个类的头文件
    NOTE:这种方法切记不可使用类名来定义变量和函数的变量参数,只可用来定义引用或者指针。
      

  5.   

    classA的头文件中增加
    #ifndef _CLASS_A_H_FILE
    #define _CLASS_A_H_FILE
    ...头文件内容#end if
    classB头文件处理方法类似
    #ifndef _CLASS_B_H_FILE
    #define _CLASS_B_H_FILE
    ...头文件内容#end if这样可确保头文件只被加载一次
      

  6.   

    #pragma once
    在文件头加这个,只被包含一次
    ----------问题未解决如果B只是调用A的函数的话,试试把include"A.H"放在B.CPP中
    A中如果有定义的数据结构或者类,B用的到的话,就在B.H中加个声明,但是不要定义出来
    不知道说明白了没
    -----------------其实不单单是调用函数,还要在A中定义一个B类型的成员变量。
    classA的头文件中增加
    #ifndef _CLASS_A_H_FILE
    #define _CLASS_A_H_FILE
    ...头文件内容#end if
    classB头文件处理方法类似
    #ifndef _CLASS_B_H_FILE
    #define _CLASS_B_H_FILE
    ...头文件内容#end if这样可确保头文件只被加载一次
    ------------------------------------已试过,不行a) 分别定义ClassA和ClassB,并在cpp文件中实现之
    b) 在两个头文件的开头分别用class ClassB;和class ClassA;声明对方
    c) 在两个cpp文件中分别包含另外一个类的头文件
    NOTE:这种方法切记不可使用类名来定义变量和函数的变量参数,只可用来定义引用或者指针。
    -------------------------------------这种方法解决了谢谢各位