我正在尝试使用以下行进行编译,但我遇到指针混淆:
int test = _s->GetFruitManager()->GetFruits()[2].GetColour();
std::cout << test << std::endl;
其中_s是指向S的指针,GetFruitManager()返回指向FruitManager对象的指针,GetFruits()返回std::vector<Fruit>*
,然后我希望能够使用operator []来访问特定的Fruit对象并调用Fruit的GetColour()方法。
我认为在某些时候我需要取消引用GetFruits()返回的向量*,但我无法弄清楚如何。
道歉,如果这有点令人费解!我仍然对这门语言很陌生,但我会很感激帮助清理它。我确实尝试将其分解为更易消化的步骤但无法以任何方式编译。
我实际上只是决定不使用这段代码片段,但这已经变成了好奇心,所以我仍然会提出这个问题:)
答案 0 :(得分:5)
你需要这样做:
(*(_s->GetFruitManager()->GetFruits()))[2].GetColour();
答案 1 :(得分:4)
作为使用[]
语法的替代方法,您可以调用.at()
:
int test = _s->GetFruitManager()->GetFruits()->at(2).GetColour();
答案 2 :(得分:3)
丑陋的版本:
int test = _s->GetFruitManager()->GetFruits()->operator[](2).GetColour();
答案 3 :(得分:2)
是的,您需要取消引用GetFruits()
返回的指针:
int test = (*_s->GetFruitManager()->GetFruits())[2].GetColour();
答案 4 :(得分:2)
FruitManager* temp_ptr = _s->GetFruitManager();
std::vector<Fruit>* ptr_vec = temp_ptr->GetFruits();
Fruit* f_obj_ptr = (*ptr_vec)[2];
int test = f_obj_ptr->GetColour();
即使已经发布了正确的答案,我更喜欢这样的版本,因为它更具可读性。当你两天后回来时,你会发现一个错误/更容易/更快地修复。
答案 5 :(得分:0)
由于没有人提到它,也有这个替代方案(我个人只喜欢在gdb中使用):
int test = _s-&gt; GetFruitManager() - &gt; GetFruits()[0] [2] .GetColour();