u010608071
风的回忆_LightS
采纳率0%
2016-07-18 01:23 阅读 2.6k

两个类相互引用的问题C++

这是我同学问我的一个问题,我给出了解决方法,貌似是解决了,但是我自己却不知其所以然,所以来请教一下。

需求是这样,两个类,A,B双方的成员函数都相互调用了对方的类型作为参数如下图所示,但这样会报错C2061

注释掉的部分是我给我的同学的解决方法,加入前置声明后就不会报错了,但我还不知道这是为什么,求教了。图片说明图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

8条回答 默认 最新

  • Jonah_ZC Jonah_ZC 2016-07-18 01:29
    点赞 1 评论 复制链接分享
  • CSDNXIAOC Robot-C 2016-07-18 01:32

    c++中常会出现两个类相互引用的问题,如果直接相互引用对方的头文件,编译时会报错......
    答案就在这里:C++两个类相互引用的问题
    ----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

    点赞 评论 复制链接分享
  • VisualEleven Eleven 2016-07-18 09:03

    可以直接在类的前面申明class xxxx;
    在.cpp中再去#include "xxx.h"即可~

    点赞 评论 复制链接分享
  • kasenobaso kasenobaso 2016-07-20 02:20

    想得硬板一点就是你在用 CTestClassB 之前要先声明它, 那行 class CTestClassB; 就是这个作用了。追究得深一点的就是 Compiler 的运行原理了。这些可以慢慢学。

    点赞 评论 复制链接分享
  • tianyabin tianyabin 2016-07-20 03:05

    超前引用问题, 如果俩个类互相引用那么在一个类前面加上 class xxx; 声明一下另一个类, 然后编译器在编译的时候会预留出来空间

    点赞 评论 复制链接分享
  • mygirlgod mygirlgod 2016-07-22 05:54

    你这个应该是交叉编译了,在头文件里面 #ifndef

    点赞 评论 复制链接分享
  • John_ToStr John_ToDebug 2016-07-28 07:57

    不太同意以上各我的看法(包括给链接的那位,未接解决根本问题): 假如说编译器先编译 TestClassB.h文件(编译器对于头文件编译顺序是不定的), 那么在此前程序预编译的时候需要(预编译又称为预处理,是做些代码文本的替换工作。处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等)将TestClassA.h 中的类定义拷贝到对应文件中。之后呢,由于编译过程是自上而下的,所以编译器会先编译在预处理过程拷贝过来的代码,而TestClassA.h中是CTestClassB类的定义,预处理后TestClassB.h中代码格式如下:
    图片说明
    以上截图已经说明了问题,如果还有什么问题请私信,随时、回答....

    点赞 评论 复制链接分享
  • John_ToStr John_ToDebug 2016-07-28 08:00

    所以在这种情况下,前置声明则显得尤为重要了,但是工程中一般要避免这种情况! 当然有了前置声明就可以不要头文件了.

    点赞 评论 复制链接分享

相关推荐