C++ 没有运算符"<<"匹配这些操作数(继承)

C++ no operator "<<" match these operand (inheritance)

本文关键字:lt 操作数 继承 C++ 运算符      更新时间:2023-10-16

我刚刚开始在C 中启动类继承。当我制作"测试"程序时,COUT语句发生了错误。不知道如何修复它,并感谢您的回应。

#include <iostream>
using namespace std;
class Power{
public:
    void isWeak(){
        cout << " Weak"<< endl;
    }
    void isStrong(){
        cout << " Strong" << endl;
    }
};
class Person:public Power{};
class Person2:public Power{};
int main(){
    Person human;
    Person2 human2;
    cout << "Human is " << human.isWeak() << endl; //error
    cout << "Human 2 is " << human2.isStrong() << endl; //error
    system("pause");
    return 0;
}

main()的cout语句在输出和人类之间具有该错误

将功能更改为

char const *isWeak(){
    return " Weak";
}
char const *isStrong(){
    return " Strong";
}

当前定义,两个函数都有void返回类型,这意味着MAIN内的cout语句正在尝试打印void,这是没有意义的,并且是错误的原因。

您正在尝试打印void

cout << "Human is " << human.isWeak() << endl;

与键入

相同
cout << "Human is " << void << endl;

不会编译。您需要做的是通过以下任何一种方式定义您的功能:

class Power
{
public:
    std::string isWeak()
    {
        return std::string(" is weak");
    }
    std::string isStrong()
    {
        return std::string(" is strong");
    }
};

或更改您的代码:

cout << "Human is ";
human.isWeak();
cout << endl;
cout << "Human 2 is ";
human2.isStrong();
cout << endl;

问题与isWeak()和isstrong()返回类型有关。这两个函数返回void,您正在尝试打印它。您可以尝试一下 -

cout << "Human is " ;
human.isWeak();
cout << endl;
 cout << "Human 2 is " ;
 human2.isStrong();
cout << endl; 

您正在尝试在 cout << "Human is " << human.isWeak() << endl;

中'打印'void'语句

您需要更改isWeakisStrong功能才能返回std::string/const char*或更改呼叫的方式:

到字符串:

const char* isWeak() {
    return " Weak";
}
// then you can do 
cout << "Human is " << human.isWeak() << endl;

或更改调用函数的方式:

cout << "Human is ";
human.isWeak();

您的isWeakisStrong功能是void它们没有返回任何内容;呼叫cout << human.isWeak()期望isWeak返回某物(int,string,double等)。