A.h文件
#ifndef _A_H_
#define _A_H_
#include"B.h"
static int count=0;
class A
{
public:
void fun1();
};
#endif
B.h文件
#ifndef _B_H_
#define _B_H_
class A; //注意:这里是C++类的前向声明,没有用include“A.h”把对方加进来是考虑到了没有必要,因为最终两个类是要编译到一块
class B
{
public:
void fun2();
};
#endif
A.cpp文件
#include "stdafx.h"
#include "A.h"
#include <iostream>
using std::cout;
using std::endl;
void A::fun1()
{
cout<<"a"<<endl<<count++<<endl;
if(count==1000)
{
cout<<"太多了,停不下来了";
getchar();
exit(0);
}
B b;
b.fun2();
}
B.cpp文件
#include "stdafx.h"
#include "A.h" //注意:这个地方没用B.h是考虑到了编译连接的顺序
#include <iostream>
using std::cout;
using std::endl;
void B::fun2()
{
cout<<"b"<<endl<<count++<<endl;
if(count==1000)
{
cout<<"太多了,停不下来了";
getchar();
exit(0);
}
A a;
a.fun1();
}
main程序文件
#include "stdafx.h"
#include<iostream>
#include"A.h" //注意:这个地方没有include“B.h”但是下面用的了B类,说明B类头文件肯定在A.h中有include。
using std::cout;
using std::endl;
void main()
{
A a;
B b;
a.fun1();
b.fun2();
getchar();
}
分享到:
相关推荐
总结,C++中类之间的相互调用是一种强大的设计手段,但需要谨慎处理循环包含和封装性问题。通过前置声明、智能指针和朋友函数,我们可以有效地解决这些问题,实现类之间的有效协作。在实际项目中,应尽量减少这种...
这样的预防措施可以避免编译错误,尤其是在大型项目中,头文件的相互包含关系可能会变得非常复杂。 总的来说,理解和掌握`#include`指令及其路径引用对于编写和管理C/C++项目至关重要。通过正确的路径引用,我们...
当两个或多个类相互依赖,即一个类的定义中需要另一个类的信息时,就会出现头文件互相包含的问题,这可能导致编译错误或不必要的重复编译,影响开发效率。 #### 问题描述 假设我们有两个类`A`和`B`,它们分别在...
6. **头文件的相互包含** - 头文件可能需要包含其他头文件以获取所需的功能。为了避免无限递归包含,通常需要谨慎地管理头文件的包含关系,合理使用头文件保护宏。 7. **预处理器变量** - 预处理器变量是预处理器...
在C++编程语言中,`#include`预处理器指令用于将其他源文件或头文件的内容插入到当前源文件中,以便在编译时合并代码。`#include`有两种不同的引用方式,即`<file>`和`"file"`,这两种方式在处理头文件查找路径和...
根据提供的信息,我们可以总结出以下有关“C++小球碰撞”的相关知识点: ### C++小球碰撞概述 在计算机编程领域,“C++小球碰撞”通常指的是使用C++语言实现的小球之间的碰撞检测与响应机制。此类程序常用于游戏...
在C++编程中,将JSON字符串转换为C++类对象是一项常见的任务,特别是在处理网络通信、数据存储或配置文件时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析...
在C++编程中,头文件相互包含确实是一个常见的复杂问题,尤其当涉及到类的嵌套和依赖时。这里,我们将详细讨论这个问题,并提供一些解决策略。 首先,让我们来看一下类嵌套的问题。在C++中,类可以被嵌套定义,就像...
### C++ 调用Java类:JNI技术详解 #### 引言 随着软件工程的发展,跨语言调用成为一种常见的需求。对于C++与Java这两种广泛应用的语言来说,实现互相调用不仅能提升软件的灵活性,还能更好地利用不同语言的优势。...
总的来说,通过JNI,C++和Java代码可以相互调用,提供了一种灵活的跨语言通信机制。在Visual Studio 2019中,你可以方便地利用这个特性来构建混合语言的应用,实现特定功能的优化或者充分利用已有的C++库。在实际...
### C++ 常见问题解答 #### 1. 学习C++是否需要先学习C? 虽然C和C++之间存在很多相似之处,但两者是独立的语言系统。理论上讲,可以直接从C++开始学习而不需要预先掌握C语言的基础。然而,由于C++继承了许多C的...
C++标准头文件通常不包含.h后缀,比如`#include <iostream>`和`#include <string>`。而C标准库头文件在C++中会去尾加.h,如`#include <stdio.h>`。系统C头文件,如`#include <sys/types.h>`,也是C++程序中可能需要...
桥接实现文件则是C++与OC交互的桥梁,它既可以包含C++代码,也可以包含OC代码。以下是一个简单的例子: 1. 创建一个桥接头文件(如`MyOCClass.h`): ```cpp #import @interface MyOCClass : NSObject - (void)...
本文介绍了C/C++中字符串与数字之间转换的多种实现方式,包括使用`<sstream>`库、`<cstdio>`库中的函数以及`itoa`和`ltoa`函数。不同的方法适用于不同的场景,开发者可以根据实际需求选择最适合的方案。对于更复杂的...
C++程序通常由多个文件组成,这些文件之间通过不同的方式相互关联。 - **解决方案**: 包含多个项目(或工程)。 - **项目**: 包含多个源文件。 - **源文件**: 包含多个变量和函数。 #### 3.2 编译单元 每个源文件...
这个类可以包含构造函数来初始化日期,以及`toSeconds`和`fromSeconds`方法进行转换: ```cpp class TimeClass { public: TimeClass(int year, int month, int day) : date_(year, month, day) {} long long ...
A类包含B类的实例,而B类也包含A类的实例 二、求解策略 1)错误的解法 A文件包含B,而B文件又包含A文件,这样形成死循环 #include "B.h" class A { int i;...
首先,要使用C++11的多线程功能,你需要包含`<thread>`头文件。在这个头文件中,定义了一个`std::thread`类,它是创建新线程的基础。下面是一个简单的例子,展示了如何创建一个执行特定函数的新线程: ```cpp #...
在实际的JniDemo项目中,你可以找到上述步骤的完整实现,包括Java类、C++源码、构建配置等。通过运行这个示例,你将直观地理解C++和Java如何协同工作,以及NDK和JNI如何简化这个过程。 总之,C++和Java的互调用在...
N皇后问题是一个经典问题:在N×N的棋盘上摆放N个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上。这个问题不仅在计算机科学领域有广泛的应用,还涉及到组合数学等多个学科。 #### ...