C++ C++;是否将对象成员设置为其他对象成员的引用/指针?
(我不确定这个标题的措辞是否正确,因为我对C++还是新手。) 我有两个类,松散地表示在这里:C++ C++;是否将对象成员设置为其他对象成员的引用/指针?,c++,pointers,reference,C++,Pointers,Reference,(我不确定这个标题的措辞是否正确,因为我对C++还是新手。) 我有两个类,松散地表示在这里: class SuperGroup { public: LayoutObj theLayout; } class SomeClass { public: LayoutObj myLayout; SuperGroup myGroup; } 在SomeClass的构造函数中,我想设置myGroup。布局要指向SomeClass的searchLayout。大概是这样的: SomeCl
class SuperGroup
{
public:
LayoutObj theLayout;
}
class SomeClass
{
public:
LayoutObj myLayout;
SuperGroup myGroup;
}
在SomeClass
的构造函数中,我想设置myGroup。布局要指向SomeClass
的searchLayout
。大概是这样的:
SomeClass::SomeClass()
{
myGroup.theLayout = &myLayout;
}
我这样做对吗?或者我需要使用指针吗?我的代码似乎可以编译,但当我执行它时,它崩溃了,我可以告诉它与这个赋值有关。另外,我不确定它是否编码错误,或者我使用的SDK/API是否不喜欢它
我之所以尝试使用超组
引用myLayout
,是因为我在超组
中有许多方法需要使用myLayout
来自SomeClass
。我只是试图避免每次都通过引用传递myLayout
。有道理?有没有更简单的方法来实现这一点?您确实需要一个指针。尝试使用:
LayoutObj *theLayout;
如果没有指针,则试图将LayoutObj
分配给内存地址。这可能会编译,但不是您想要的行为。相反,您需要一个指针来指向LayoutObj
的内存地址
行myGroup.theLayout=&myLayout代码>保持不变
<> >通常是C++的情况,请注意<<代码> MyFrase在<代码> TelayOut之前不超出范围。如果发生这种情况,您将有一个悬空的指针。如果有任何风险,请考虑使用某种智能指针,或者以其他方式修改您的设计来适应这个问题。 < P>是的,您需要使用一个指针:<代码> LayouToj*TrayayOut/<代码>;p>
参考你最后一段,我会考虑一些备选的设计,如:
- 要求将
LayoutObj
传递到超组的每个方法中,从而将特定的LayoutObj
与可执行的操作分离,或
- 如果其他地方不需要这些方法,请将它们移动到
某个类中,或者
- 使它们成为
LayoutObj
本身的方法
这是有道理的。现在,当我编译时,无论我在哪里尝试这样做,我都会得到一个错误:myGroup.theLayout.whatever=something;错误C2228:“.whatever”的左边必须有class/struct/union。这就像它不允许我访问布局的成员,因为它是一个指针…@Jakobud:对于指针,你必须使用->
而不是
(ptr->foo
相当于(*ptr)。foo
,你需要遵从指针才能使用它)。会教你更快。:)