C++ C++;通过引用传递对象?
我有一个类,它表示游戏中的捕获区域。在这个类中,我有一个正在捕获该区域的玩家向量(CUtlVector是我正在使用的SDK中的向量类)C++ C++;通过引用传递对象?,c++,pointers,reference,C++,Pointers,Reference,我有一个类,它表示游戏中的捕获区域。在这个类中,我有一个正在捕获该区域的玩家向量(CUtlVector是我正在使用的SDK中的向量类) typedef CUtlVector CappingPlayersType;(定义在类外) cappingplayers类型CapturePlayers; 在我的GameManager类中,我尝试使用以下代码检索玩家的捕获列表 void GameManager::UpdateCaptureData() { // Loop Active Capture
typedef CUtlVector CappingPlayersType;(定义在类外)
cappingplayers类型CapturePlayers;
在我的GameManager类中,我尝试使用以下代码检索玩家的捕获列表
void GameManager::UpdateCaptureData()
{
// Loop Active Capture Points
for(int i = 0; i < CaptureZones.Count(); i++)
{
// Get List of Active Players Capturing this Point
CappingPlayersType *CapturePlayers = NULL;
int CapPlayersCount = CaptureZones.Element(i)->GetPlayersCapturing(CapturePlayers);
int CTriggerCaptureZone::GetPlayersCapturing(CappingPlayersType &CapPlayers)
{
CapPlayers = CapturePlayers;
return CapturePlayers.Count();
}
void GameManager::UpdateCaptureData()
{
//循环活动捕获点
对于(int i=0;igetplayerscapturePlayers(CapturePlayers);
int-CTriggerCaptureZone::GetPlayerCapting(CappingPlayerType和CapPlayers)
{
CapPlayers=CapturePlayers;
return CapturePlayers.Count();
}
但是已经有一段时间了,我记不起从函数中检索列表并将其存储在局部变量中的最佳方法。IIRC我无法通过引用传递,因为CapturePlayers对象为NULL,但我不知所措。如果有任何帮助,我将不胜感激。我不知道GetPlayerCapting()之后您在做什么调用,但我认为通过返回计数和对实际数据的引用来重载一个调用只会使您陷入困境,除非您想使用原始指针
为什么不让一个函数返回计数,一个函数返回引用,然后一个接一个地调用它们呢?无需传递错误数据、预初始化或在上面浪费更多时间。我不知道GetPlayerCapture()之后您在做什么调用,但我认为通过返回计数和对实际数据的引用来重载一个调用只会使您陷入困境,除非您想使用原始指针
为什么不让一个函数返回计数,一个函数返回引用,然后一个接一个地调用它们呢?无需传递错误数据、预初始化或在上面浪费更多时间。如果我理解正确,您希望传入CapturePlayer,并让GetPlayerCapting负责初始化它 您有两个选择:
CappingPlayersType CapturePlayers;
然后,您可以在GetPlayersCapting中将其作为引用接受,这将在返回计数之前对其进行修改最终,您选择哪一个取决于您自己,这取决于比您在此处显示的更多的上下文。不过,我强烈推荐选项2,只是因为您应该尽可能避免处理指针。如果我理解正确,您希望传入CapturePlayer,并让GetPlayerCapting处理initia我喜欢它 您有两个选择:
CappingPlayersType CapturePlayers;
然后,您可以在GetPlayersCapting中将其作为引用接受,这将在返回计数之前对其进行修改最终,您选择哪一个取决于您自己,这取决于比您在此处显示的更多的上下文。然而,我强烈推荐选项2,只是因为您应该尽可能避免处理指针。您的意思是这样的吗
const CappingPlayersType& CTriggerCaptureZone::GetPlayersCapturing() const
{
return CapturePlayers;
}
在调用函数中:
const CappingPlayersType& CapturePlayers = CaptureZones.Element(i)->GetPlayersCapturing();
size_t CapPlayersCount = CapturePlayers.size();
我没有太仔细地看代码的其余部分(只是尝试与您所拥有的内容相适应),但似乎您可能只是想通过常量引用返回内部
CUtlVector
。您的意思是这样的吗
const CappingPlayersType& CTriggerCaptureZone::GetPlayersCapturing() const
{
return CapturePlayers;
}
在调用函数中:
const CappingPlayersType& CapturePlayers = CaptureZones.Element(i)->GetPlayersCapturing();
size_t CapPlayersCount = CapturePlayers.size();
我没有太仔细地看代码的其余部分(只是试图与您拥有的内容相适应),但似乎您只是想通过常量引用返回内部
CUtlVector
。您的代码有点混乱。似乎您总是向GetPlayerCapture函数传递空指针,然后试图将其强制为引用。您能更详细地解释一下您试图执行的操作吗,为什么CapturePlayers总是空的?你的代码有点让人困惑。似乎你总是在传递一个指向GetPlayerCapture函数的空指针,然后试图将它强制到一个引用。你能更详细地解释一下你想做什么,为什么CapturePlayers总是空的吗?我想他想让它接受一个argu计算,对参数进行变异,然后返回一个整数,这就是他想传入指针的原因。@Cam:他可能想这样做,但他应该这样做吗?@Stuart:我不这么认为。特别是我不明白为什么他必须在.count()时返回计数
无论如何都是CapPlayers的成员函数。考虑到他向我们展示的有限环境,很难说清楚,但我认为这个答案是正确的。有一个+1。我的直觉是,一个名为getplayerscapting
的函数应该返回进行抓拍的玩家,而不是有多少。但请叫我老样子ed…:)我想他想让它接受一个参数,对该参数进行变异,然后返回一个整数,这就是他想传入指针的原因。@Cam:他可能想这样做,但他应该这样做吗?@Stuart:我不这么认为。特别是我不明白为什么他必须在.count()时返回计数
无论如何都是CapPlayers的一个成员函数。考虑到他向我们展示的有限背景,很难说清楚,但我认为这个答案是正确的。a+1。我的直觉是,一个名为G的函数