Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.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++_Pass By Reference - Fatal编程技术网

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]
的引用/指针,而不是它的副本。