如何解决我正在尝试从void函数进行打印,但由于它未定义,因此无法编译
我的代码无法编译,但是我只是想让我的主文件正常运行并打印输出。我还试图比较字符串是否等于print。主要错误在主文件中,因为头文件和cpp文件可以编译,但是当我尝试从void print函数获取一些输出时,它崩溃并告诉我错误,没有从父类调用的匹配函数。你能告诉我如何解决这个问题吗?谢谢。
头文件:
#include <iostream>
#ifndef BOOK_H
#define BOOK_H
class Book
{
public:
Book(std::string title,std::string author,int callNo);
virtual void print();
virtual bool equals(std::string book1,std::string book2);
protected:
std::string titleBook;
std::string auth;
int number;
};
class Journal: public Book
{
public:
Journal(int volume);
void print();
protected:
int vol;
};
#endif
cpp文件
#include <iostream>
#include "Book.h"
using namespace std;
Book::Book(string title,string author,int callNo)
{
titleBook = title;
auth = author;
number = callNo;
};
void Book::print()
{
titleBook = " ";
auth = " ";
number = 0;
};
bool Book::equals(string book1,string book2)
{
bool printing = false;
if(book1 == book2) {
printing = true;
cout << "Books are a match!";
print();
}
else if (book2 != book1){
printing = false;
cout << "Books are not a match,try again.";
}
};
Journal::Journal(int volume):Book(titleBook,auth,number)
{
vol = volume;
};
void Journal::print()
{
vol = 0;
};
主文件:
#include <iostream>
#include "Book.h"
using namespace std;
int main()
{
Book b1("Norton’s Star Atlas","A.P. Norton",510);
Book b2("Pocket Sky Atlas","J. Sinot",511);
if (b1.equals(b1,b2)) {
cout << "The books are the same" << endl;
}
else {
cout << "The books are different" << endl;
}
b1.print();
b2.print();
}
return 0;
}
解决方法
您的问题是您的方法签名和实际调用不同。在Book
类的方法签名中,您的签名写为:
virtual bool equals(std::string book1,std::string book2);
这告诉编译器Book
有一个名为equals
的方法,并采用std::string
和std::string
。但是在主要功能中,您需要使用两本书来调用它:
Book b1("Norton’s Star Atlas","A.P. Norton",510);
Book b2("Pocket Sky Atlas","J. Sinot",511);
b1.equals(b1,b2);
当编译器尝试在equals
中找到Book
方法时,它找不到两个Book
实例而不是两个std::string
实例导致它吐出no matching function for call to ‘Book::equals(Book&,Book&)’
消息。
您可以通过添加接受两个equals
实例的Book
来解决此问题。替换现有功能或重载当前功能都无所谓;但是,我怀疑您是否想按书籍的字符串值而不是其实际成员属性来比较书籍。
您声明的相等函数采用两个strings
,但是您提供了两个Book
对象。
假设您要比较Book中的两个书名,您的函数应如下所示;
bool Book::equals(const Book& book1,const Book& book2)
{
if(book1.titleBook == book2.titleBook)
{
cout << "Books are a match!";
return true;
}
else
{
cout << "Books are not a match,try again.";
return false;
}
};
您的打印功能没有意义;
我已经修改了您的打印功能,以打印对象成员;
void Book::print()
{
std::cout << "titleBook: " << titleBook << '\n'
<< "auth: " << auth << '\n'
<< "number: " << number;
};
void Journal::print()
{
std::cout << "vol: " << vol;
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。