java中类相互引用很方便,c++中有编译顺序的问题

c++声明作用,告诉编译器,我声明的东西你要是找不到,那就跳过去吧,等全编译完你就可以找到了。

C1.h

#pragma once
#include "C2.h"

//C1.h要包含C2.h,C2.h也要包含C1.h时,//要在类C2.h的定义前加上另一个类的声明class C1;,//否则编译时后编译的类找不到先编译的类。

class C1
{ public:
C1();
~C1();
C2 *pc2;//㈡这里要是写C2 pc2的话,在C2.h中就不能再写C1 pc1,会形成重复创建,可以在C2.h中写C2 *pc2 void showC1();
};

C1.cpp

#include "StdAfx.h"
#include "C1.h"
#include <iostream>
using namespace std; C1::C1()
{
pc2 = new C2(this);
} C1::~C1()
{
} void C1::showC1()
{
cout<<"showC1"<<endl;
}

C2.h

#pragma once

class C1;//C1.h已经include C2.h,C2.h就不能再include C1.h,这里只声明class C1;
class C2
{
C1 *cc1;
public:
C2(C1 * p);
~C2();
void showC2();
};

C2.cpp

#include "StdAfx.h"
#include "C2.h"
#include "C1.h"//因为C2.h中没有include C1.h只对C1类做了声明,所以要使用C1 *p只能在C2.cpp中include C1.h
#include <iostream>
using namespace std; C2::C2(C1* p)
{
cc1 = p; } C2::~C2()
{
} void C2::showC2()
{
cc1->showC1();//如果C2.h和C2.cpp都没引用C1.h,这里会报错pointer to incomplete class is not allowed
cout<<"showC2"<<endl;
}

C++两个类相互引用错误留影的更多相关文章

  1. Cocos Creator两个类相互引用(调用)

    如果两个类相互引用,脚本加载阶段就会出现循环引用,循环引用将导致脚本加载出错:///////////Game.jsvar Item = require("Item");var Ga ...

  2. c++中两个类相互包含引用的相关问题

    在构造自己的类时,可能会遇到两个类相互引用的问题. 例如: class A { int i; B b; }; class B { int i; A a; }; 在这种情况下,这样就会出现一个死循环a. ...

  3. C++中两个类相互包含引用问题

    在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A { int i; B b; } class B { in ...

  4. 多态时最好将基类的析构函数设为virtual、 C++中两个类相互包含引用问题 (转载)

    多态:http://blog.csdn.net/tmljs1988/article/details/8146521 C++中两个类相互包含引用问题:http://blog.csdn.net/leo11 ...

  5. 关于node中两个模块相互引用却不会死循环的问题

    关于node中两个模块相互引用却不会死循环的问题 node中是通过require来导入加载模块的,require有两个作用: 1.加载文件模块并执行里面的代码 2.拿到被加载文件模块导出的接口对象 现 ...

  6. C++两个类相互包含引用的问题

    在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A { B b; } class B { A* a; } 请 ...

  7. c++中两个类互相引用的问题

    最近在改一个C++程序的时候碰到一条警告信息,警告信息为:“ 删除指向不完整“Q2DTorusNode”类型的指针:没有调用析构函数                1> c:\users\lxw ...

  8. c++两个类相互调用

    有可能会碰到两个类之间的相互调用的问题,例如:定义了类A和类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A { B b; }; class B { A a; }; 编译器在声明A ...

  9. C++中两个类相互include的问题

    在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型 例如: Cup.h #ifndef CUP_H #define CUP_ ...

随机推荐

  1. Lua_第17 章 数学库

    第17 章 数学库 在这一章中(以下关于标准库的几章中相同)我的主要目的不是对每个函数给出完整地说明,而是告诉你标准库可以提供什么功能.为了可以清楚地说明问题,我可能 会忽略一些小的选项或者行为.基本 ...

  2. 个人开发者帐号--我是如何实现在另一台mac上真机调试的

    本文转载至 : http://blog.csdn.net/chenyong05314/article/details/8689534   注:本人有一台mac电脑,之前申请开发者帐号的时候直接就是在这 ...

  3. FIL代币是什么?

    自从比特币价格暴涨.区块链技术火了以后,出现了币圈,币圈中有各种各样的代币,本文就和大家介绍其中的FIL代币相关内容,希望能帮助大家一点一点的了解币圈.        IPFS与Filecoin的关系 ...

  4. Java其实不支持垃圾回收

    Java其实不支持垃圾回收.如果真的支持的话,大多数Java程序在运行的一开始就应该把程序本身删除,因为这些程序本身就是垃圾.   // TODO: This is a 分割线. Please no ...

  5. 查询所有联系人并选中显示 contentprovider

    <!-- 读取联系人记录的权限 --> <uses-permission android:name="android.permission.READ_CONTACTS&qu ...

  6. 使用webpack4搭建一个基于Vue的组件库

    组内负责的几个项目都有一些一样的公共组件,所以就着手搭建了个公共组件开发脚手架,第一次开发 library,所以是参考着 iview 的配置来搭建的.记录如何使用webpack4搭建一个library ...

  7. HDU6025 Coprime Sequence —— 前缀和 & 后缀和

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6025 Coprime Sequence Time Limit: 2000/1000 MS (Java/ ...

  8. JavaWeb学习总结(三)response与request

    一.response response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletResponse.在客户端发出每个请求时,服务器 ...

  9. 值域线段树 (玲珑OJ 1117)

    点击打开题目链接 题目意思很简单: 1.插入x 2.把小于x的数变成x 3.把大于x的数变成x 4.求集合中第x小数 5.求集合中小于x的数个数 思路: 线段树,节点是值的分数,你可以离散,也可以不离 ...

  10. BZOJ_2369_区间_决策单调性

    BZOJ_2369_区间_决策单调性 Description 对于一个区间集合 {A1,A2……Ak}(K>1,Ai不等于Aj(i不等于J),定义其权值   S=|A1∪A2∪……AK|*|A1 ...