【问题标题】:Accessing an instance of a class defined in main in another class访问另一个类的 main 中定义的类的实例
【发布时间】:2021-09-10 10:53:56
【问题描述】:

我一直面临的问题与访问一个类的实例有关,我将通过一系列代码片段来解释它:

如果我有一个定义如下的class Foo

class Foo {
public:
Foo(){x=5}
private:
   int x;
} 

我在 main 中创建了该对象的一个​​实例,如下所示:

int main(){
   Foo a;
}

然后我想在另一个类中访问该对象的该实例并将其存储:

class Bar{
public:
   Bar() {copy = a}
private:
   Foo copy;
}

这怎么可能?有没有解决的办法?任何帮助表示赞赏!

【问题讨论】:

    标签: c++ pointers


    【解决方案1】:

    最自然的方法是将Foo 对象作为参数传递给Bar 构造函数:

    Bar(Foo a)
    {
        std::cout << a.x << '\n';
    }
    

    对于更新后的问题,我可能会将对象作为常量引用而不是按值传递:

    Bar(Foo const& a)
        : copy{ a }
    {
    }
    

    这会将成员变量 copy 初始化为 a 引用的 Foo 对象的副本。


    对于 Qt 的特殊情况,您几乎不应该复制QObject 派生的对象。相反,您应该有指向它们的指针

    class Bar
    {
    public:
        Bar(Foo* a)
            : pointer{ a }
        {
        }
    
    private:
        Foo* pointer;
    };
    

    【讨论】:

    • 对不起,我只是对问题进行了更改并使其更清晰,但我需要存储它或以某种方式指向它。我用的是Qt,QObject无论如何都不能复制。
    • @unity123 并没有真正改变我的答案。您仍然需要将对象传递给Bar 构造函数。可能通过 (const) 引用。
    • 问题是我收到以下错误:“parser.cpp:5:22: error: call to implicitly-deleted copy constructor of 'Device' device.h:10:16: note :“设备”的复制构造函数被隐式删除,因为基类“QObject”有一个已删除的复制构造函数 qobject.h:467:20:注意:“QObject”已在此处显式标记为已删除”。我想过你的解决方案,但它不会让我。
    • @unity123 Qt 对象几乎不应该被复制,你只能使用指针。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-07
    • 2016-01-15
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    相关资源
    最近更新 更多