C++ 在迭代器中取消对类指针函数的引用

C++ 在迭代器中取消对类指针函数的引用,c++,C++,我已经创建了一个指向类Food的指针向量 vector<Food*> items; 向量项; 该类如下所示: class Food { private: string name; int month; int year; public: void display() { cout << name << " - " << month << "/" <<

我已经创建了一个指向类Food的指针向量

vector<Food*> items;
向量项;
该类如下所示:

 class Food
 {
   private:
    string name;
    int month;
    int year;

   public:
    void display()
    {
      cout << name << " - " << month << "/" << year << endl;
    }
  }
类食品
{
私人:
字符串名;
整月;
国际年;
公众:
无效显示()
{
cout抓住了你。
*iter->display()
被编译器解释为
*(iter->display())
,因为
->
优先于(将在之前执行)
*
。一种更简洁的方式是
*(*iter.display())

  • 取消对
    食物*
    的迭代器引用
  • 尝试调用
    食物*
    上的显示失败,并导致编译器错误
  • 取消对
    display
    调用结果的引用
  • 您需要使用一些括号强制执行所需的执行顺序:
    (*iter)->display()

  • 将迭代器解引用到
    Food*
  • 再次取消对
    食品的引用
  • 调用食品上的显示
  • 解决此问题会导致问题2:
    display
    不会返回任何可以写入
    cout
    的内容。幸运的是,
    display
    完成所有需要的打印

    while (iter < items.end())
    {
        (*iter)->display();
    }
    
    那你可以

    vector<Food*>::iterator iter = items.begin();
    while (iter < items.end())
    {
      cout << **iter << endl;
    }
    
    vector::iterator iter=items.begin();
    while(iter*iter->display()
    被编译器解释为
    *(iter->display())
    ,因为
    ->
    优先于(将在之前执行)
    *
    。一种更简洁的方式是
    *(*iter.display())

  • 取消对
    食物*
    的迭代器引用
  • 尝试调用
    食物*
    上的显示失败,并导致编译器错误
  • 取消对
    display
    调用结果的引用
  • 您需要使用一些括号强制执行所需的执行顺序:
    (*iter)->display()

  • 将迭代器解引用到
    Food*
  • 再次取消对
    食品的引用
  • 调用食品上的显示
  • 解决此问题会导致问题2:
    display
    不会返回任何可以写入
    cout
    的内容。幸运的是,
    display
    完成所有需要的打印

    while (iter < items.end())
    {
        (*iter)->display();
    }
    
    那你可以

    vector<Food*>::iterator iter = items.begin();
    while (iter < items.end())
    {
      cout << **iter << endl;
    }
    
    vector::iterator iter=items.begin();
    while(iter你为什么要用指针来写这段代码?为什么不简单地用指针?我在练习用指针。你为什么要用指针写这段代码?为什么不简单地用指针?我在练习用指针。起初我以为是这样,但我得到了以下错误“错误:不匹配”operator@Young_thug这是一个完全不同的问题。
    display()
    返回一个
    void
    ,您试图将
    display()
    的返回值传递到
    cout
    。这将不起作用。只需自行更改
    cout display();
    display()
    使用
    cout
    内部解析。我专注于表面问题,忽略了实际问题。很抱歉,@Young_thug。我很快会更新答案,但快速修复方法是display会完成所有需要的打印。无需
    cout
    ,只需调用
    display
    while(iterdisplay();}
    @RemyLebeau你是个老板!谢谢你!谢谢@user4581301!你说得对!我一开始以为是这样,但我得到了以下错误“错误:不匹配”operator@Young_thug这是一个完全不同的问题。
    display()
    返回一个
    void
    ,您试图传递
    display()的返回值
    cout
    。这不起作用。只需自行更改
    cout display()display();
    display()
    使用
    cout
    内部解析。我专注于表面问题,忽略了实际问题。很抱歉,@Young_thug。我很快会更新答案,但快速修复方法是display会完成所有需要的打印。无需
    cout
    ,只需调用
    display
    while(iterdisplay();}
    @RemyLebeau你是老板!谢谢你!谢谢你@user4581301!你真是太棒了!
    class Food
    {
    private:
        string name;
        int month;
        int year;
    
    public:
        void display()
        {
          cout << name << " - " << month << "/" << year << endl;
        }
        friend ostream & operator<<(ostream & out, const Food & food)
        {
            out << food.name << " - " << food.month << "/" << food.year;
            return out;
        }
    };
    
    vector<Food*>::iterator iter = items.begin();
    while (iter < items.end())
    {
      cout << **iter << endl;
    }
    
    for (auto & item:items)
    {
          cout << *item << endl;
    }