gpt4 book ai didi

C++ - 从对象指针映射访问成员函数,在一个单独的类中通过 getter 函数

转载 作者:行者123 更新时间:2023-11-28 02:36:01 25 4
gpt4 key购买 nike

我是 C++ 的新手,我试图自己解决这个问题,但不太成功。

我在一个类中定义了一组指向一组动态分配对象的指针映射,以字符串为键,还有两个迭代器(begin() 和 end()),以及与每个迭代器对应的两个 getter 函数.

class a{

std::map<string, Fruit*> fruitSalad;
std::map<string, Fruit*>::iterator begin = fruitSalad.begin(), end = fruitSalad.end();

std::map<string, Fruit*>::iterator getBeginIter() const;
std::map<string, Fruit*>::iterator getEndIter() const;

};

映射中引用的对象及其成员函数需要在单独的驱动程序类中可访问。为了测试我的实现,我一直在尝试使用 for 循环打印对象的值,方法是通过访问器访问迭代器,如下面的代码所示。

#include "a.h"

int main(){

A fruitBowl;

std::map<string, Object*>::iterator iter;

for(iter = fruitBowl.getBeginIter(); iter != fruitBowl.getEndIter(); iter++){

cout << iter.getName() << " " << iter.getQuantity() << endl;
}
}

但我收到以下错误

error: 'std::map<std::basic_string<char>, Fruit*>:: iterator' has no member named getName()

error: 'std::map<std::basic_string<char>, Fruit*>:: iterator' has no member named getQuantity()

我假设我在我的驱动程序类中对迭代器的赋值做错了什么,但我到底做错了什么?

最佳答案

首先,当你写iter = fruitBowl.getBeginIter(); , iter是一个迭代器。这是一个类似指针的对象。如果要访问指向对象的方法,必须先取消引用它。

其次,std::map<foo, bar>中包含的对象是std::pairfoo, bar .

所以用法看起来像

for(iter = fruitBowl.getBeginIter(); iter != fruitBowl.getEndIter(); iter++){
auto pFruit = (*iter).second;

cout << (*pFruit).getName() << " "
<< (*pFruit).getQuantity() << endl;
}

第一个取消引用是访问 value map 中的键值对;第二个是访问 Fruit由指针引用。

或者,使用语法糖进行指针操作:

for(iter = fruitBowl.getBeginIter(); iter != fruitBowl.getEndIter(); iter++){
auto pFruit = iter->second;

cout << pFruit->getName() << " "
<< pFruit->getQuantity() << endl;
}

关于C++ - 从对象指针映射访问成员函数,在一个单独的类中通过 getter 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27419668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com