Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;是否将对象成员设置为其他对象成员的引用/指针?_C++_Pointers_Reference - Fatal编程技术网

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

(我不确定这个标题的措辞是否正确,因为我对C++还是新手。)

我有两个类,松散地表示在这里:

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
,你需要遵从指针才能使用它)。会教你更快。:)