`

c++ #include 类互相包含问题

    博客分类:
  • c++
阅读更多
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++ 包含类两个类互相调用彼此的类成员变量和方法

    总结,C++中类之间的相互调用是一种强大的设计手段,但需要谨慎处理循环包含和封装性问题。通过前置声明、智能指针和朋友函数,我们可以有效地解决这些问题,实现类之间的有效协作。在实际项目中,应尽量减少这种...

    C和C++不同文件夹下包含头文件的方法及#include的使用.docx

    这样的预防措施可以避免编译错误,尤其是在大型项目中,头文件的相互包含关系可能会变得非常复杂。 总的来说,理解和掌握`#include`指令及其路径引用对于编写和管理C/C++项目至关重要。通过正确的路径引用,我们...

    C++的头文件互相包含的问题

    当两个或多个类相互依赖,即一个类的定义中需要另一个类的信息时,就会出现头文件互相包含的问题,这可能导致编译错误或不必要的重复编译,影响开发效率。 #### 问题描述 假设我们有两个类`A`和`B`,它们分别在...

    c++ #include是怎么样工作的?

    6. **头文件的相互包含** - 头文件可能需要包含其他头文件以获取所需的功能。为了避免无限递归包含,通常需要谨慎地管理头文件的包含关系,合理使用头文件保护宏。 7. **预处理器变量** - 预处理器变量是预处理器...

    c++中#include &amp;lt;&amp;gt;与#include&quot;&quot;的区别详细解析

    在C++编程语言中,`#include`预处理器指令用于将其他源文件或头文件的内容插入到当前源文件中,以便在编译时合并代码。`#include`有两种不同的引用方式,即`&lt;file&gt;`和`"file"`,这两种方式在处理头文件查找路径和...

    C++小球碰撞C++ 小球碰撞

    根据提供的信息,我们可以总结出以下有关“C++小球碰撞”的相关知识点: ### C++小球碰撞概述 在计算机编程领域,“C++小球碰撞”通常指的是使用C++语言实现的小球之间的碰撞检测与响应机制。此类程序常用于游戏...

    json字符串转换c++类对象

    在C++编程中,将JSON字符串转换为C++类对象是一项常见的任务,特别是在处理网络通信、数据存储或配置文件时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析...

    VC ASCII,UNICODE,UTF8字符串互相转换的C++代码

    首先,ASCII(American Standard Code for Information Interchange)是最基础的7位字符编码,包含128个字符,主要由英文字符、数字和一些基本的符号组成。ASCII编码简单且广泛支持,但在处理非英文字符时会遇到局限...

    C++中头文件相互包含的几点问题.docx

    在C++编程中,头文件相互包含确实是一个常见的复杂问题,尤其当涉及到类的嵌套和依赖时。这里,我们将详细讨论这个问题,并提供一些解决策略。 首先,让我们来看一下类嵌套的问题。在C++中,类可以被嵌套定义,就像...

    C++ 调用Java类,已实践

    ### C++ 调用Java类:JNI技术详解 #### 引言 随着软件工程的发展,跨语言调用成为一种常见的需求。对于C++与Java这两种广泛应用的语言来说,实现互相调用不仅能提升软件的灵活性,还能更好地利用不同语言的优势。...

    visual studio 2019下C++通过JNI调用JAVA代码

    总的来说,通过JNI,C++和Java代码可以相互调用,提供了一种灵活的跨语言通信机制。在Visual Studio 2019中,你可以方便地利用这个特性来构建混合语言的应用,实现特定功能的优化或者充分利用已有的C++库。在实际...

    C++常见问题解答。。。。。。。。。

    ### C++ 常见问题解答 #### 1. 学习C++是否需要先学习C? 虽然C和C++之间存在很多相似之处,但两者是独立的语言系统。理论上讲,可以直接从C++开始学习而不需要预先掌握C语言的基础。然而,由于C++继承了许多C的...

    字符串和数字的转换(c/c++多种实现方式)

    本文介绍了C/C++中字符串与数字之间转换的多种实现方式,包括使用`&lt;sstream&gt;`库、`&lt;cstdio&gt;`库中的函数以及`itoa`和`ltoa`函数。不同的方法适用于不同的场景,开发者可以根据实际需求选择最适合的方案。对于更复杂的...

    C++ primer自学资源共享

    C++标准头文件通常不包含.h后缀,比如`#include &lt;iostream&gt;`和`#include &lt;string&gt;`。而C标准库头文件在C++中会去尾加.h,如`#include &lt;stdio.h&gt;`。系统C头文件,如`#include &lt;sys/types.h&gt;`,也是C++程序中可能需要...

    C++ oc 互相调用

    桥接实现文件则是C++与OC交互的桥梁,它既可以包含C++代码,也可以包含OC代码。以下是一个简单的例子: 1. 创建一个桥接头文件(如`MyOCClass.h`): ```cpp #import @interface MyOCClass : NSObject - (void)...

    C++编程笔记

    C++程序通常由多个文件组成,这些文件之间通过不同的方式相互关联。 - **解决方案**: 包含多个项目(或工程)。 - **项目**: 包含多个源文件。 - **源文件**: 包含多个变量和函数。 #### 3.2 编译单元 每个源文件...

    C++时间类 实现日期和秒之间的转换

    这个类可以包含构造函数来初始化日期,以及`toSeconds`和`fromSeconds`方法进行转换: ```cpp class TimeClass { public: TimeClass(int year, int month, int day) : date_(year, month, day) {} long long ...

    C++中两个类互相包含的策略

     A类包含B类的实例,而B类也包含A类的实例  二、求解策略  1)错误的解法  A文件包含B,而B文件又包含A文件,这样形成死循环   #include "B.h"    class A  {   int i;...

    C++11多线程示例

    首先,要使用C++11的多线程功能,你需要包含`&lt;thread&gt;`头文件。在这个头文件中,定义了一个`std::thread`类,它是创建新线程的基础。下面是一个简单的例子,展示了如何创建一个执行特定函数的新线程: ```cpp #...

    C++和Java互相调用实例

    在实际的JniDemo项目中,你可以找到上述步骤的完整实现,包括Java类、C++源码、构建配置等。通过运行这个示例,你将直观地理解C++和Java如何协同工作,以及NDK和JNI如何简化这个过程。 总之,C++和Java的互调用在...

Global site tag (gtag.js) - Google Analytics