c++交叉#include问题

这个问题会引起莫名其妙的编译错误,

碰到类里有其他类的指针的话,不要#include,提前声明下即可

class_a.h

#ifndef CLASS_A_H
#define CLASS_A_H  

class B;
class A
{
public:
    void Print()
    {
        std::cout << "This is class A\n";
    }  

    B *b;
};  

#endif  

class_b.h

#ifndef CLASS_B_H
#define CLASS_B_H  

class A;
class B
{
public:
    void Print()
    {
        std::cout << "This is class B\n";
    }  

    A *a;
};  

#endif  

main.cpp

#include <iostream>  

#include "class_a.h"
#include "class_b.h"  

int main()
{
    A aa;
    aa.b->Print();  

    B bb;
    bb.a->Print();
}  
时间: 2025-01-09 04:28:49

c++交叉#include问题的相关文章

2-SAT 学习笔记

总结了下就三句话: 1.确定集合,以及每个集合必须二选一的状态 2.枚举相关的集合,再枚举相关集合可能出现的会影响状态选择的矛盾情况 3.以矛盾为前提,确定的情况才加边 1.POJ 3227 每条连线当作是一个集合,每个集合的状态是在圆内或者圆外,任意两个集合都可能出现矛盾,矛盾是位置交叉 #include"cstdio" #include"queue" #include"cmath" #include"stack" #inc

(编程训练)再回首,数据结构——(升级版)使用栈判断括号匹配

点击打开 基础版 最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会. 希望这些能提供给初学者一些参考. 在VC++6.0下可运行,当初还写了不少注释. /* ********************************************************** * 3-2 * 设在一个算术表达式中允许使用3种括号:圆括号"(".")",方 * 括号"["."]",花括号"

多目标遗传算法 ------ NSGA-II (部分源码解析) 交叉操作 crossover.c

遗传算法中的交叉操作是 对NSGA-II  源码分析的  最后一部分, 这一部分也是我 从读该算法源代码和看该算法论文理解偏差最大的  函数模块. 这里,首先提一下,遗传算法的  交叉操作.变异操作都是需要设定概率的, 即交叉概率和变异概率. 假设种群个体 大小为  popsize ,  那么交叉操作需要进行 popsize/2 次 ,   变异操作需要进行 popsize 次, 其中每次操作的时候都需要随机生成一个随机数来与给定的概率进行判断,若小于给定的概率则继续执行否则退出该操作. 如果继

[转载]arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别

arm交叉编译器gnueabi.none-eabi.arm-eabi.gnueabihf.gnueabi区别 (http://www.veryarm.com/296.html) 命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch - 体系架构,如ARM,MIPS vendor - 工具链提供商 os - 目标操作系统 eabi - 嵌入式应用二进制接口(Embedded Application Binary Interface) 根

交叉染色法判断二分图

题目链接:传送门 题目大意:给你一副无向联通图,判断是不是二分图 题目思路:交叉染色法 下面着重介绍下交叉染色法的定义与原理 首先任意取出一个顶点进行染色,和该节点相邻的点有三种情况: 1.未染色    那么继续染色此节点(染色为另一种颜色) 2.已染色但和当前节点颜色不同      跳过该点 3.已染色并且和当前节点颜色相同       返回失败(该图不是二分图) 下面在拓展两个概念: (1) 如果一个双连通分量内的某些顶点在一个奇圈中(即双连通分量含有奇圈),那么这个双连通分量的其他顶点也在

#include,#import ,@class 有什么区别?

#include 和 #import 有相同的效果,只不过#import 能确保头文件只被导入一次,不会引起重复导入.#import能把头文件的所有信息都获取到,包含这个类的变量和方法.而@class只是会告诉编译器,其后声明的名称是类的名称,至于这些类是如何定义的却完全不知道,因此,即使你在头文件中使用了@class,还是需要在声明文件.m中导入头文件的. 注意:@class 的使用时为了防止头文件之间互相导入(交叉导入):

交叉引用的解决方法——类声明的应用

交叉引用的解决方法 什么是交叉引用? 什么是交叉引用?一言以蔽之,就是:A类中包含B类的对象,B类中包含A类的对象. 以一场景为例 我们先来看一个场景.假设有一个电子文档(Document).一个文档下有多个页(Page),每个页下有多个文本单元(TextUnit,表示文档内元素的基本单位),一个文档中的所有文本单元对象都有唯一的ID.这样每创建一个文本单元时都要为其设置一个唯一的ID,我们在Document类中就需要一个生成唯一ID的方法为所有的文本单元创建唯一标识.于是我们就会有下面的类关系

交叉编译和交叉调试环境搭建及使用

1. 交叉编译器 1.1 交叉编译器介绍 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译.这个编译过程就叫交叉编译.简单地说,就是在一个平台上生成另一个平台上的可执行代码,而这种工具就是交叉编译器(cross compiler). 1.2 搭建交叉编译环境 1.2.1 实验环境 交叉编译工具:arm-linux- 4.2.2 编译平台:ubuntu10.10 开发板类型:UT-S3C6410 1.2.2 搭建步骤 1) 在/usr/local

arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf的区别

命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] [-gcc] arch – 体系架构,如ARM,MIPS vendor – 工具链提供商 os – 目标操作系统 eabi – 嵌入式应用二进制接口(Embedded Application Binary Interface) 注意 没有vendor时,用none代替: 没有os支持时,也用none代替 同进没有vendor和os支持时,只用一个none代替,比如arm-none-eabi中