C++两个类相互调用
头文件都只声明对方是类(不知道细节),不包含对方头文件。这样能创建类指针。
cpp文件包含对方头文件,能用指针调用函数。
CA.h
#pragma once class CB; class CA { public: CA(int a); void CallB(); void printA(); CB* pb; private: int ma; };
CA.cpp
#include "CA.h" #include "CB.h" #include <iostream> using namespace std; CA::CA(int a) { ma = a; pb = nullptr; } void CA::printA() { cout << "CA print "<< ma << endl; } void CA::CallB() { pb->printB(); }
CB.h
#pragma once class CA; class CB { public: CB(int b); void CallA(); void printB(); CA* pa; private: int mb; };
CB.cpp
#include "CB.h" #include "CA.h" #include <iostream> using namespace std; CB::CB(int b) { mb = b; pa = nullptr; } void CB::printB() { cout << "CB print " << mb << endl; } void CB::CallA() { pa->printA(); }
CppTest.cpp
#include "CA.h" #include "CB.h" #include <iostream> using namespace std; int main() { CA ca(5); CB cb(7); ca.pb = &cb; cb.pa = &ca; ca.CallB(); cb.CallA(); int t; cin >> t; return t; }