我正在尝试在两个类之间传递值:
#ifndef classa_inc
#define classa_inc
#include "classb.hpp"
class classa {
private:
int a;
classb tmp;
public:
classa(int);
classa ();
int get_a() const;
int get_b() const;
};
#endif
// ..
#include "classa.hpp"
classa::classa (int _a) : a(_a), tmp(30) {}
classa::classa () : a(20), tmp(30) {}
int classa::get_a () const {
return a;
}
int classa::get_b () const {
return tmp->get_b ();
}
// ..
#ifndef classb_inc
#define classb_inc
#include "classa.hpp"
class classa;
class classb {
private:
classa *ca;
int b;
public:
classb (int);
classb (classa *);
int get_b () const;
};
#endif
// ..
#include "classb.hpp"
classb::classb (int _b) : b(_b) {}
classb::classb (classa *ca) {
b = ca->get_a ();
}
int classb::get_b () const {
return b;
}
// ...
#include <iostream>
#include "classa.hpp"
#include "classb.hpp"
int main () {
classa a(10);
classa a1; // 20
classb b(&a1); // pass 20
std::cout << a.get_a() << std::endl; // 10
std::cout << a.get_b() << std::endl; // 30
std::cout << b.get_b() << std::endl; // 20
return 0;
}
我已经阅读了一些关于该主题的博客和教程,我想问问你们这样做是否正确,或者是否有其他方法或解决方法,因为我遇到了错误:
classa.hpp:9:3: 错误:‘classb’ no nombra a un tipo
像 classb 这样的东西没有命名类型......有什么想法吗?
最佳答案
在classb.hpp中,classa的前向声明就足够了(class classa;)。您不需要包含 classa.hpp。包含它会造成循环依赖:classb.hpp包含classa.hpp,classa.hpp又包含classb.hpp等
所以:
#ifndef classb_inc
#define classb_inc
//#include "classa.hpp" -> not ok and useless
class classa; // => ok
classa.hpp 需要包含在 classb.cpp 中,因为它需要了解其实现。
#include "classb.hpp"
#include "classa.hpp"
classb::classb (int _b) : b(_b) {}
classb::classb (classa *ca) {
b = ca->get_a (); //needs to know if classa indeed has a get_a() method
}
int classb::get_b () const {
return b;
}
这些更改使代码编译成功。
关于c++ - 类之间传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29952393/