如何在 C++ 中使用 for 循环输出向量中的所有对象
Posted
技术标签:
【中文标题】如何在 C++ 中使用 for 循环输出向量中的所有对象【英文标题】:How can I output all objects in a vector using for loop in c++ 【发布时间】:2020-06-03 02:03:10 【问题描述】:BookLibrary
类构造BookInfo
类对象的向量。任务是将一些“书籍”(BookInfo
类的对象)添加到向量中并打印出来。出于某种原因,传统的for(unsigned int i = 0; i < vector.size(); i++) cout << vector[i] << endl;
循环不起作用。这是 Savitch 教科书“用 C++ 解决问题”中的一个家庭作业项目。
代码如下:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class BookInfo
public:
BookInfo(string newAuthor, string newTitle);
BookInfo(string newTitle);
string getName();
string getAuthor();
string getTitle();
private:
string author;
string title;
;
class BookLibrary
public:
BookLibrary();
BookLibrary(vector<BookInfo> newLibrary);
void add(BookInfo newBook);
void size();
void printInfo();
private:
vector<BookInfo> library;
;
int main()
BookLibrary library1;
BookInfo book1("Michael Krichton", "Jurassic Park");
BookInfo book2("War and Peace"), book3("Valter Savitch", "Programming in C++");
library1.add(book1);
library1.add(book2);
library1.add(book3);
library1.size();
library1.printInfo();
return 0;
BookInfo::BookInfo(string newAuthor, string newTitle)
author = newAuthor;
title = newTitle;
BookInfo::BookInfo(string newTitle) :
title(newTitle), author("unknown")
string BookInfo::getName()
return (author + " " + title);
string BookInfo::getAuthor()
return author;
string BookInfo::getTitle()
return title;
BookLibrary::BookLibrary()
BookLibrary::BookLibrary(vector<BookInfo> newLibrary)
library = newLibrary;
void BookLibrary::add(BookInfo newBook)
library.push_back(newBook);
void BookLibrary::size()
cout << library.size();
void BookLibrary::printInfo()
for (unsigned int i = 0; i < library.size(); i++)
cout << library[i] << endl;
它在最后一行的cout <<
下划线。
【问题讨论】:
BookInfo
需要提供operator<<
。
“不工作”不是一个有用的问题描述。这就像通过说“我的车不动”来向机械师解释您的汽车问题。
编译器 'complains': "error C2679: binary '
@kanulilewa 正如cigien所说,您需要为BookInfo
定义一个operator<<
我不确定我是否熟悉这个,我该如何定义它?
【参考方案1】:
您的循环无法打印出BookInfo
对象,因为您尚未为BookInfo
定义operator<<
。因此,像cout << library[i]
这样的语句不知道如何处理library[i]
返回的BookInfo
。
你需要添加那个操作符,例如:
class BookInfo
public:
...
friend ostream& operator<<(ostream &os, const BookInfo &book)
os << "\"" << book.title << "\" by " << book.author;
return os;
...
;
如果您想改用 getName()
方法,则需要将其声明为 const
(无论如何您都应该为所有的 getter 这样做),例如:
class BookInfo
public:
...
string getName() const;
...
friend ostream& operator<<(ostream &os, const BookInfo &book)
os << book.getName();
return os;
...
;
string BookInfo::getName() const
return ...;
【讨论】:
非常感谢,这对我来说是新的,我会尝试将其添加到我的代码中 效果很好!!!这是更新后的代码: class BookInfo public: BookInfo(string newAuthor, string newTitle); BookInfo(string newTitle);字符串 getName() 常量;字符串 getAuthor();字符串 getTitle();朋友 ostream& operator 这个主题叫ostream吗?我想对这件事做更多的研究,因为这对我来说是新的以上是关于如何在 C++ 中使用 for 循环输出向量中的所有对象的主要内容,如果未能解决你的问题,请参考以下文章