由于需要今天需要实现一个在B类设置某个属性的时候也需要及时将A类的某个属性设置,在C类设置某个属性的时候也需要及时将A类的某个属性设置,...
那么想到了用extern实现:
aa.h
#ifndef AA_H_INCLUDED
#define AA_H_INCLUDED
class A
{
public:
A();
~A();
void setA(int _a);
void setB(int _b);
int getA();
int getB();
private:
int a;
int b;
};
#endif // AA_H_INCLUDED
aa.cpp
#include "aa.h"
#include <iostream>
A::A(){}
A::~A(){}
A aa;
void A::setA(int _a){
//std::cout << "barararar" << std::endl;
a = _a;
}
void A::setB(int _b){
}
int A::getA(){
return a;
}
int A::getB(){
return b;
}
bb.h
#ifndef BB_H_INCLUDED
#define BB_H_INCLUDED
#include "aa.h"
class B
{
public:
B();
~B();
int getA();
void setA(int a1);
private:
int a;
};
#endif // BB_H_INCLUDED
bb.cpp
#include "bb.h"
#include <iostream>
B::B() {}
B::~B() {}
extern A aa;
void B::setA(int a1)
{
a = a1;
//std::cout << "foodfodof" << std::endl;
aa.setA(a1);//fuck
}
int B::getA()
{
return a;
}
main.cpp
#include <iostream>
#include "bb.h"
using namespace std;
extern A aa;
int main()
{
B b;
b.setA(3);
cout<<aa.getA()<<endl;
return 0;
}
运行结果为3。
总结:
1:多个文件中要用到一个变量时,非extern莫属。
2:类中函数的命名传入的参数名需要与类中的属性不一致。如A中有int a,那么setA(int a)是不行的。
3:上面的extern A aa需要声明在aa.cpp中,要不然有可能出现多次定义的错误。
最后感谢大神的指导。