2014-02-07 160 views
0

我做了一個程序,其中有三個班,分別來自彼此繼承,但是當我試圖讓一個派生類的功能,COUT給了我一個錯誤,因爲這C++多繼承

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; 
} 
+0

名稱被定義爲一個全局變量,它不是你的類的字段 – jordsti

回答

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; 
} 
+0

謝謝@nodakai – Jim

0

你定義newInf()作爲返回的std :: string功能,

你在哪裏實際上返回的std ::法院這是ostream的

所以在運行時它會嘗試的ostream轉換爲字符串,並失敗,這就是爲什麼你得到消息:

從沒有合適的用戶定義的轉換「的std :: basic_ostream>」到「標準: :字符串「存在