c++-C++ 类相互包含如何定义?

问题描述

C++ 类相互包含如何定义?

假如现在有这样两个类a.b,两个类中互相包含:
class a:

        #ifndef a_h
    #define a_h
    #include "b.h"
    class A {
    private:
        B member;
    public:
        B f();
        friend void B::g();
    };
    #endif

class b:

      #ifndef b_h
    #define b_h
    #include "a.h"
    class B {
    private:
        A member;
    public:
        void g();
        A f();
        friend class A;
    };
    #endif

main.cpp

        #include "a.h"
    #include "b.h"
    int main(int argc, char *argv[])
    {return 0};

g++编译出错:
unknown type name ‘A’

请问怎么解决这个问题?
非常感谢!

解决方案

应该在类内部定义指针,实例化B的时候,调用函数来new a.

解决方案二:

不能循环包含
a.h

 #ifndef a_h
#define a_h
class B; //不要直接包含,简单声明即可
class A {
    private:
        B* member; //都要换成指针,这样才能用上面的简单声明(预先不知道大小)
    public:
        B* f();
        friend void B::g();
};
#endif

b.h也一样处理。

解决方案三:

其中一个类中使用前向引用申明另一个类就可以了。

时间: 2024-10-28 03:00:56

c++-C++ 类相互包含如何定义?的相关文章

"xxx"(类) 并不包含 "yyy"(方法) 的定义 的错误怎么解决啊?

问题描述 我用VS08写的一个类,编译时老是说"xxx"(某类)并不包含"yyy"(某方法)的定义只要有调用xxx中的方法就会报这个错,但我的类中明明有该方法,而且如果我无视它,继续运行的话,还是能正常该类的方法的.请问这是为什么啊?怎么解决啊?难道是vs的bug? 解决方案 解决方案二:肯定程序问题.重新生成下解决方案三:我只知道2003里经常出现这样的问题...解决办法就是在项目引用中移除那个类,然后重新引用...解决方案四:看看把方法修饰符写为public或者

头文件相互包含出错问题解决

        今天写程序遇到了一个问题,花了好几个小时各种找资料都没有解决,终于皇天不负有心人还是让我给把它kill 掉了.什么问题呢?那就是头文件相互包含出错(当然之前我并不知道是这个原因),先来看代码: Test1.h ? 1 2 3 4 5 6 7 8 #include "cocos2d.h" #include "Test2.h"   class Test1 : public Layer {     ----     Test2 *test2; }; Tes

java当中一个类必须包含变量,方法,对象吗

问题描述 java当中一个类必须包含变量,方法,对象吗 可不可以单单有方法 单单有变量 java当中一个类必须包含变量,方法,对象吗 单单有对象 解决方案 不是的.一般的java类是有属性和方法的,比如实体类,有该实体的属性,和对应的get/set方法.有些业务类只有方法.根据需要只有组合. 解决方案二: java 对象使用类变量与方法(小笔记)java 当中变量存储位置的区别java中一个类想调用另一个类的变量 解决方案三: 没有这些说法,可以任意组合 解决方案四: 一个类里面什么都没有都可以

VC++开发中完美解决头文件相互包含问题的方法解析_C 语言

所谓超前引用是指一个类型在定义之前就被用来定义变量和声明函数. 一般情况下,C/C++要求所有的类型必须在使用前被定义,但是在一些特殊情况下,这种要求无法满足,例如,在类CMyView中保留了一个非模式对话框对象指针,该对象用于显示/修改一些信息.为了实现对话框"应用"按钮,把对话框做的修改立刻更新到view界面上,为此,需要在对话框类中需要保存view类的指针,这样定义关系就变成如下的代码: 复制代码 代码如下:    #ifndef __MYVIEW_H__   #define _

matrix-C++类中包含数组,如何重载运算符,第一次进入,还没有c币,求大神帮忙了,感激不尽

问题描述 C++类中包含数组,如何重载运算符,第一次进入,还没有c币,求大神帮忙了,感激不尽 这是头文件 #include #ifndef MATRIX_H_ #define MATRIX_H_ class matrix { private: double a[20][20]; int m,n; public: matrix(); matrix(const matrix&a); ~matrix(); matrix operator=(const matrix&a); friend void

php遍历类中包含的所有元素的方法

  本文实例讲述了php遍历类中包含的所有元素的方法.分享给大家供大家参考.具体分析如下: 这里可获得php类包含的所有元素以key-value的形式输出 ? 1 2 3 4 5 6 7 8 9 10 11 12 class MyTestClass{ const TESTVAR1 = 1001; const TESTVAR2 = 1002; const TESTSTR1 = 'hello'; } $rc = new ReflectionClass('MyTestClass'); $v = $rc

格式-关于Android项目中不同包之间的类相互调用

问题描述 关于Android项目中不同包之间的类相互调用 在同一个项目中我创建了几个包,然后在包 com.g.zxing.client.android中创建了类文件数据库MySQLiteOpenHelper我想在包com.g.zxing.client.android.result中的TextResultHandler.java调用MySQLiteOpenHelper格式如下import com.g.zxing.client.android.MySQLiteOpenHelper; public M

数据抓取的一个类,包含一些常用的方法

原文:数据抓取的一个类,包含一些常用的方法 using System;using System.Configuration;using System.IO;using System.Net;using System.Text;using System.Text.RegularExpressions; namespace XXX{    /// <summary>    /// Func 的摘要说明.    /// </summary>    public class Func   

《从零开始学Swift》学习笔记(Day 25)——类和结构体定义

 原创文章,欢迎转载.转载请注明:关东升的博客 Swift中的类和结构体定义的语法是非常相似的.类使用class关键词定义类,使用struct关键词定义结构体,它们的语法格式如下: class 类名 {     定义类的成员 } struct 结构体名 {     定义结构体的成员 } 从语法格式上看,Swift中的类和结构体的定义更类似于Java语法,不需要像C++和Objective-C那样把接口部分和实现部分放到不同的文件中. 下面来看一个示例: class Employee { //