C++错误:与'operator<<'不匹配

C++ error: no match for 'operator<<'

本文关键字:lt 不匹配 operator 错误 C++      更新时间:2023-10-16

您好,我有一个错误问题,我不明白问题是什么。所以这里是完整的代码:

#include <iostream>
#include <string>
using namespace std;
class GradeBook
{
public:
    GradeBook(string name)
    {
        setCourseName(name);
    } // end GradeBook constructor
    void setCourseName(string name)
    {
        courseName = name;
    } // end setCourseName
    string getCourseName()
    {
        return courseName; // return object's courseName
    } // end getCourseName
    void displayMessage()
    {
        cout << "Welcome to the grade book forn" << getCourseName() << "!" << endl;
    } // end displayMessage
private:
    string courseName;
}; // end class GradeBook
int main()
{
    // create two GradeBook objects
    GradeBook gradeBook1("CS101 Introduction to C++ Programming");
    GradeBook gradeBook2("CS102 Data Structures in C++");
    cout << "gradeBook1 created for course: " << gradeBook1.displayMessage();
}

错误部分是当我尝试打印出此行时:

cout << "gradeBook1 created for course: " << gradeBook1.displayMessage();

如果我像gradeBook1.displayMessage();一样使用它,它会打印消息,但如果我像我显示的那样使用它,它会给我带来令人讨厌的错误。

谢谢!

displayMessage() 是一个返回 void 的函数。您无法流式传输此内容,因为它什么都不是。只需在单独的行中调用它。

改变

cout << "gradeBook1 created for course: " << gradeBook1.displayMessage();

cout << "gradeBook1 created for course: ";
gradeBook1.displayMessage();

它被扩展为:

<<{ cout << "Welcome to the grade book forn" << getCourseName() << "!" << endl } ;这肯定是不合逻辑的 .

所以,使用:

cout <<"gradeBook1 为课程创建:"; gradeBook1.displayMessage();

如果要将

<<运算符与classgradeBook1一起使用,请重载运算符。而不是在类中使用 displayMessage(); 方法。

ostream &operator<<(ostream &out)
{
     out<<"Welcome to the grade book forn" << getCourseName() << "!" << endl;
     return out;
}

您可以使用 cout 调用您的对象,如下所示:

cout<<gradeBook1;