C++中如何在一个类内引用另一个类?附示例代码求解决方案
问题根因
你代码的核心问题是bar类没有和任意foo类实例建立关联,无法直接访问不属于自身作用域的variable1变量。
方案1:bar持有foo的引用(最适配你当前代码结构)
这种方案适合bar和foo实例生命周期绑定的场景,也就是你当前foobar类同时持有两者实例的情况:
#include <iostream> class foo{ public: int variable1 = 012; // 注意0开头是八进制,这里值是十进制的10 }; class bar{ private: foo& foo_ref; // 存储foo实例的引用 public: // 构造函数传入foo引用,用初始化列表赋值 bar(foo& f): foo_ref(f) {} int getFooVariable(){ return foo_ref.variable1; } }; class foobar{ public: foo p2; bar p1; // foobar构造函数里先初始化foo,再把foo传给bar的构造 foobar(): p2(), p1(p2) {} }; int main(){ foobar fb; std::cout << fb.p1.getFooVariable() << std::endl; return 0; }
注意:这里
012是八进制写法,实际输出的是十进制的10,如果你想表示十进制的12,去掉开头的0即可。
方案2:调用方法时传入foo实例
如果不需要长期绑定bar和foo,只需要临时获取foo的变量,可以直接改方法参数:
#include <iostream> class foo{ public: int variable1 = 012; }; class bar{ public: int getFooVariable(const foo& f){ return f.variable1; } }; class foobar{ public: bar p1; foo p2; }; int main(){ foobar fb; std::cout << fb.p1.getFooVariable(fb.p2) << std::endl; return 0; }
内容的提问来源于stack exchange,提问作者big boi
相关产品推荐
相关产品推荐

