解决两类相互包含使用另一个类成员函数

// VistorMode.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <IOSTREAM>
using namespace std;

class B;
class A{
public:
    /*
    void getBaction(B * p){
        p->action();         //会出错,error:use of undefined type ‘B‘
                             //因为前面只声明了这个类,但类的成员函数还未知,只能定义一个B类型的指针
    }
    */

    void getBaction(B * p);  //实现放于B的action声明定义后面
    void action(){
        cout<<"action in A"<<endl;
    }
};

class B{
public:
    void getAaction(A * p){
        p->action();
    }
    void action(){
        cout<<"action in B"<<endl;
    }
};
void A::getBaction(B * p){
    p->action();
}
int main(int argc,char * argv[]){
    A a ;
    B b ;
    a.getBaction(&b);
    b.getAaction(&a);
    return 0;
}
时间: 2024-08-27 08:36:09

解决两类相互包含使用另一个类成员函数的相关文章

两个类相互包含引用的问题--类前向声明

1.背景 编程中遇到如下错误:使用不完全类型**以及**前向声明. 查找相关资料后发现是类的前向声明(forward declaration)问题:在程序中声明一个类后,此类是一个不完全类型(incompete type),即已知此类是一个类型,但不知道包含哪些成员. 不完全类型只能以有限方式使用,不能定义该类型的对象.不完全类型只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类型或返回类型的函数. 2.为什么需要前向声明 在构造自己的类时,有可能会碰到两个类之间

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

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

C++空类编译器自动生成的6个成员函数

一.问题 在C++中,编译器会为空类提供哪些默认成员函数?分别有什么样的功能呢? 二.详解 1.空类,声明时编译器不会生成任何成员函数 对于空类,编译器不会生成任何的成员函数,只会生成1个字节的占位符. 有时可能会以为编译器会为空类生成默认构造函数等,事实上是不会的,编译器只会在需要的时候生成6个成员函数:一个缺省的构造函数.一个拷贝构造函数.一个析构函数.一个赋值运算符.一对取址运算符和一个this指针. 代码: [html] view plaincopy #include <iostream

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

在构造自己的类时,可能会遇到两个类相互引用的问题. 例如: class A { int i; B b; }; class B { int i; A a; }; 在这种情况下,这样就会出现一个死循环a.b.a.b.a.b....,一般来说,应避免这种情况. 如果确实需要的话,一般来说,至少有一方需要定义成指针. 例如: class A { int i; B b; }; class B { int i; A* a; }; 如果按照以上的方式,既然存在互相引用,就必须互相包含头文件,如果仅仅是在自己的

【转】 C++中两个类相互包含引用问题

原文:http://blog.csdn.net/leo115/article/details/7395077 在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A { int i; B b; } class B { int i; A* a; } 请注意上面的定义内容,一般情况下是不能出现类A,类B相互引用都定义对象,即如下的样子: class A { int i; B b; } class B { int

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

在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A { B b; } class B { A* a; } 请注意上面的定义内容,一般情况下是不能出现类A,类B相互引用都定义对象,即如下的样子: class A { B b; } class B { A a; } 编译器在声明A的时候,由于B的声明在A的下面所以出现编译错误 那么,在定义时因为相互引用肯定会需要相互包含头文件,如果仅仅只是在各自的头文件中包含

C++类相互包含问题

CA类包含CB类的实例,而CB类也包含CA类的实例.代码如下 //A.h实现CA类的定义 //B.h实现CB类的定义 #include "B.h"  #include "A.h" int main() class CA  class CB { {  { CA instanceA; public:   public: return 0; int iData;  int iData; } CB instaceB;   CA instaceA; };  }; 编译出错分析

string类的两种实现方法及string的一些成员函数的实现

string的第一种实现方法: #include<iostream> using namespace std; class String { public:      String(char *str="")//构造函数       :_str(new char[strlen(str)+1])      {           strcpy(_str, str);      }      String(const String& str)//拷贝构造函数,实现深拷贝

python (知识点:类)简单的创建一个类

#!/usr/bin/env python # -*- coding: utf-8 -*- """ Created on Mon Nov 14 01:01:29 2016 @author: toby """ #知识点:类和对象 #名词:1.实例化一个类,生成一个对象,通过类进行实例化来生成一个对象 class Animal:     body = 'Four legs' class Human: #类的名称     body = 'Hands,