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

时间:2014-02-07 03:51:14

标签: c++ class inheritance runtime-error

我刚刚在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语句在输出和人类之间有错误

4 个答案:

答案 0 :(得分:3)

将功能更改为

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

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

答案 1 :(得分:2)

您正在尝试打印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;

答案 2 :(得分:1)

您正试图在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等)。

答案 3 :(得分:1)

问题在于isWeak()和isStrong()返回类型。这两个函数返回void并且您正在尝试打印它。你可以试试这个 -

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

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