类和 int 的 getline 等效,也'no viable overloaded ='错误
Getline equivalent for class and int, and also 'no viable overloaded =' error
class Book{
public:
string _title;
string _author;
string _publisher;
Date _published;
float _price;
string _isbn;
int _page;
int _copies;
Book(void);
Book(string, string, string, Date, float, string, int, int);
};
Book::Book(void)
{
_title = "";
_author = "";
_publisher = "";
_published = 0;
_price = 0;
_isbn = "";
_page = 0;
_copies = 0;
其中 Date 是一个类,包括日、月和年的整数。这将生成一个不可行的重载 = 错误。
int main(void)
{
LinkedList myList;
ifstream myFile("sample.txt");
string title;
string author;
string publisher;
Date published;
float price;
string isbn;
int page;
int copies;
while( myFile )
{
getline(myFile,title);
getline(myFile,author);
getline(myFile,publisher);
getline(myFile,published);
getline(myFile,price);
getline(myFile,isbn);
getline(myFile,page);
getline(myFile,copies);
myList.insert_rear(new Book(title,author,publisher,published,price,isbn,page,copies));
}
myList.print_list();
return 0;
}
对于getline publish(Date class(,price(int(,page(int(和copyies(int(,我得到了一个没有匹配的getline函数调用。我知道getline是针对字符串的,所以我预料到了这个错误。我能做什么呢?
谢谢,如果您需要查看更多代码,请告诉我。
不能简单地std::getline
到int
中。认真地。这比走进魔多更难。
有几种方法可以做到这一点。
一种是混合std::getline
和使用>>
运算符。但
myFile >> price;
getline(myFile,isbn);
不起作用,因为myFile >> price;
会让流中的行尾被getline(myFile,isbn)
吞噬,从而导致 isbn
中的空字符串。一些简单的东西,比如
char end_of_line;
myFile >> price >> end_of_line;
getline(myFile,isbn);
将完成这项工作,假设您的文件严格遵守格式。
myFile >> price;
myFile.ignore(numeric_limits<streamsize>::max(), 'n');
getline(myFile,isbn);
更安全。它丢弃所有内容,包括行尾。
可悲的是,除非你为Date
写了operator>>
,否则你不能用published
做到这一点。
下一个不错的选择是将所有内容作为字符串读取,然后在调用 Book
构造函数之前将其转换为适当的数据类型。类似的东西
int main()
{
ifstream myFile("sample.txt");
string title;
string author;
string publisher;
string published;
string price;
string isbn;
string page;
string copies;
while (getline(myFile, title) &&
getline(myFile, author) &&
getline(myFile, publisher) &&
getline(myFile, published) &&
getline(myFile, price) &&
getline(myFile, isbn) &&
getline(myFile, page) &&
getline(myFile, copies))
{
myList.insert_rear(new Book(title,
author,
publisher,
string_to_date(published), // function does not exist
stof(price),
isbn,
stoi(page),
stoi(copies)));
}
return 0;
}
题外话:注意所有getline
都在while
除非成功读取所有输入,否则这不会进入循环的主体。
while( myFile )
在读取所有值之前,在开始时测试好坏度。所有这些都告诉你,你读到的最后一件事是好的。它不保证您将阅读的下一篇文章的质量。目前,getline(myFile,title);
可能会失败以及之后的所有内容,您将使用无效读取的结果构建新Book
。始终阅读,测试您是否阅读了良好的信息,然后才使用您阅读的内容。
可能最好的方法是采用上述两种方法中的任何一种,并将它们构建成Book
operator>>
。
然后你可以
int main()
{
ifstream myFile("sample.txt");
Book temp;
while (myFile >> temp)
{
myList.insert_rear(new Book(temp));
}
return 0;
}
这甚至很容易摆脱分配的Book
,这是值得的黄金重量。
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- c++20[[no.unique_address]]中的新功能是什么
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- "no matching function for call to 'Vector::Vector'"错误
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- 处理"no operator found"
- 我在 ifstream input_file(文件名)行中收到错误"no matching function to call";
- 如何解决"no Qt platform plugin could be initialized"问题?
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- 为什么当我在 std::string 中打开文件名的 fstream 时出现"no matching function"错误?
- 已解决 - C++ 的崇高文本中的"fatal error: opencv: no such file or directory"
- 如何修复C++中的" No viable overloaded '=' "
- 尝试查找两组点的交集,错误"No viable overloaded '=' "
- 在C++中使用地图时"No viable conversion from..."
- C++继承"No Viable Conversion"错误
- "No viable overloaded =" nullptr
- C++ XCode 中的错误:在定义运算符 * 时"no viable overloaded operator *=" *= 已经过测试并且正常运行
- 为什么我会"No viable conversion from 'vector<Country>' to 'int'"?
- 类和 int 的 getline 等效,也'no viable overloaded ='错误