You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 22:24:02