我有一个代表游戏中捕获区的类。在这个类的内部,我有一个捕获该区域的玩家矢量(CUtlVector是我正在使用的SDK中的矢量类)
typedef CUtlVector<ConquestPlayer*> CappingPlayersType; (defined outside of class)
CappingPlayersType 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();
}
虽然已经有一段时间了但我记不起从函数中检索列表并将其存储在局部变量中的最佳方法。 IIRC我无法通过引用传递,因为CapturePlayers对象是NULL,但我不知所措。任何帮助将不胜感激。
答案 0 :(得分:2)
如果我理解正确,你想要传递CapturePlayers,并让GetPlayersCapturing负责初始化它。
您有两种选择:
您可以将CapturePlayers设为指针,并将其作为GetPlayersCapturing中的指针接受。您可以将其设置为NULL,将其传入,GetPlayersCapturing将为其分配内存/初始化它。
您可以将CapturePlayers声明为这样的局部变量:
CappingPlayersType CapturePlayers;
然后你可以接受它作为GetPlayersCapturing的参考,它会在返回计数之前对其进行修改。
最终,您选择哪一个取决于您,这取决于您在此处显示的更多背景。但是我强烈建议选项2,因为你应该尽可能避免处理指针。
答案 1 :(得分:2)
你的意思是这样吗?
const CappingPlayersType& CTriggerCaptureZone::GetPlayersCapturing() const
{
return CapturePlayers;
}
在调用函数中:
const CappingPlayersType& CapturePlayers = CaptureZones.Element(i)->GetPlayersCapturing();
size_t CapPlayersCount = CapturePlayers.size();
我没有仔细查看其余的代码(只是试图适应你的内容),但似乎你可能只想通过const引用返回内部CUtlVector
。
答案 2 :(得分:0)
在GetPlayersCapturing()调用之后我不知道你在做什么,但是我认为通过返回计数和对真实数据的引用来重载一个调用只会让你失望,除非你想去工作用原始指针。
为什么没有一个函数返回计数,一个函数返回一个引用,并一个接一个地调用它们?无需传递错误数据,预先初始化或浪费更多时间。