C++ 引用不返回?
我的类有一个对象数组,称它为C++ 引用不返回?,c++,pass-by-reference,C++,Pass By Reference,我的类有一个对象数组,称它为Foo。它在类中存储为Foo*m_Foos。假设它在[0]处有一个值,保证,并且Foo有一个名为IsSet的属性,它只是一个bool之类的东西 void TryThis() { Foo returnValue; GetValue(returnValue); returnValue.IsSet = true; if(m_Foo[0].IsSet != returnValue.IsSet) { // ERROR!!!! }
Foo
。它在类中存储为Foo*m_Foos
。假设它在[0]处有一个值,保证,并且Foo
有一个名为IsSet
的属性,它只是一个bool之类的东西
void TryThis()
{
Foo returnValue;
GetValue(returnValue);
returnValue.IsSet = true;
if(m_Foo[0].IsSet != returnValue.IsSet)
{
// ERROR!!!!
}
}
void GetValue(Foo &container)
{
container = m_Foos[0];
}
有人能解释为什么m_Foo[0]=/=returnValue吗?我的语法错误在哪里
我希望m_Foo[0]与returnValue是相同的引用,在内存中是相同的Foo
。TryThis()
没有修改存储在m_Foos
数组中的Foo
对象。
GetValue()
正在将Foo
对象从m\u Foos[0]
分配给另一个Foo
对象,该对象是TryThis()的本地对象。在该分配期间正在制作副本TryThis()
然后修改的是副本,而不是原件
如果希望TryThis()
直接修改原始Foo
对象,则需要执行类似以下操作:
void TryThis()
{
Foo &returnValue = GetValue();
returnValue.IsSet = true;
// m_Foo[0] is set true.
}
Foo& GetValue()
{
return m_Foos[0];
}
或者这个:
void TryThis()
{
Foo *returnValue;
GetValue(returnValue);
returnValue->IsSet = true;
// m_Foo[0] is set true.
}
void GetValue(Foo* &container)
{
container = &m_Foos[0];
}
GetValue()
将returnValue
的值指定为等于m_Foos[0]
的值。它不会导致returnValue
成为对mu Foos[0]
的引用。我更新了这个问题,以提供一个示例。代码现在有一个conditional,不知道您希望如何重新表述它。我得到了一个答案,所以这很好。啊,所以我需要一个指针在TryThis
,我不能让它成为本地的?谢谢。@user9999991,那不是指针。这是一个引用,我指的是第二个例子,它有一个指针。使用void函数更符合我最初示例的格式。我的错误。TryThis()
需要使用指向mu Foos[0]
的引用/指针,而不是它的副本。