访问另一个类的 main 中定义的类的实例

Posted

技术标签:

【中文标题】访问另一个类的 main 中定义的类的实例【英文标题】:Accessing an instance of a class defined in main in another class 【发布时间】: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;

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

【问题讨论】:

【参考方案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 对象几乎不应该被复制,你只能使用指针。

以上是关于访问另一个类的 main 中定义的类的实例的主要内容,如果未能解决你的问题,请参考以下文章

如何在另一个类的函数中访问一个类的变量?

Lua实现简单的类,继承,多态 实例

2.关于java的类的访问修饰符和main方法的声明

内部类

类别可以访问它扩展的类中定义的实例变量吗?

Friend函数访问静态库中定义的类的私有成员