访问另一个类的 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 中定义的类的实例的主要内容,如果未能解决你的问题,请参考以下文章