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