C ++多级继承

时间:2014-02-07 19:05:39

标签: c++ class inheritance multiple-inheritance

我创建了一个程序,其中有三个类,每个类都相互继承但是当我尝试创建一个派生类函数时,cout给了我一个错误,比如这个

3   IntelliSense: no suitable user-defined conversion from "std::basic_ostream<char, std::char_traits<char>>" to "std::string" exists   e:\Visual Studio Projects\test\test\Source.cpp  19  10  test

我想改变什么,解决方案是什么。如果你能指出我的错误那么好

#include<iostream>
#include <string>


std::string name;
class Base{
public:
    void getRed(){
        std::cout << "Your name is : " << name << std::endl;
    }
};

class Boy:public Base{
public:
    Boy(){
        name = "john";
    }
    std::string newInf(){
        return std::cout << "Boy2 name is: " << name << std::endl;
    }
};

class Boy2: public Boy{
public:
    Boy2(){
        name = "Mike";
    }
};

int main(){
    Boy boy;
    boy.getRed();
    Boy2 boy2;
    boy2.newInf();
    system("pause");
    return 0;
}

2 个答案:

答案 0 :(得分:2)

您的编译错误与多级继承无关。

std::string newInf(){
    return std::cout << "Boy2 name is: " << name << std::endl;
}

这是错误的。 std::cout << "Boy2 name is: " << name << std::endl是...... std::basic_ostream &,您无法将其转换为std::string

这应该没问题,就像你写的getRed()一样。

void newInf(){
    std::cout << "Boy2 name is: " << name << std::endl;
}

答案 1 :(得分:0)

您将 newInf()定义为返回 std :: string 的函数,

您实际上正在返回 std :: cout ,即 ostream

所以在运行时它会尝试将ostream转换为字符串,然后失败,这就是你收到消息的原因:

  

“std :: basic_ostream&gt;”没有合适的用户定义转换到“std :: string”存在