2016-06-18 117 views
0

我想運行下面的C++代碼來理解使用MS Visual Studio 15的類繼承。生成並運行代碼後,我收到消息說MS VS已停止工作。如果有人能幫助我理解我做錯了什麼,我會非常感激。需要幫助使用C++類繼承

#include<cstdio> 
#include<string> 
#include<conio.h> 
using namespace std; 

// BASE CLASS 
class Animal { 
private: 
    string _name; 
    string _type; 
    string _sound; 
    Animal() {};  
protected: 
    Animal(const string &n, const string &t, const string &s) :_name(n), _type(t), _sound(s) {};  
public: 
    void speak() const;  
}; 

void Animal::speak() const { 
    printf("%s, the %s says %s.\n", _name, _type, _sound); 
} 

// DERIVED CLASSES 
class Dog :public Animal { 
private: 
    int walked; 
public: 
    Dog(const string &n) :Animal(n, "dog", "woof"), walked(0) {}; 
    int walk() { return ++walked; } 
}; 


int main(int argc, char ** argv) {  
    Dog d("Jimmy"); 
    d.speak();   
    printf("The dog has been walked %d time(s) today.\n", d.walk());   
    return 0; 
    _getch(); 
} 
+0

'有人能幫助我瞭解我做錯了什麼'你有VS2015 –

+0

服從警告[編譯時](http://coliru.stacked-crooked.com/a/b01383841d47037d)鑽石問題! –

回答

1
printf("%s, the %s says %s.\n", _name, _type, _sound); 

你不能printf()這種方式使用std::string

使用

printf("%s, the %s says %s.\n", _name.c_str(), _type.c_str(), _sound.c_str()); 

代替。


我寧可推薦使用std::cout讓一切都能在C++中無縫工作。

0

printf%s預計c-style null-terminated byte string,而不是std::string,它們不是一回事。所以printf("%s, the %s says %s.\n", _name, _type, _sound);將不起作用,它不應該編譯。您可以使用std::string::c_str(),這將返回const char*。如

printf("%s, the %s says %s.\n", _name.c_str(), _type.c_str(), _sound.c_str()); 

或者使用std::coutstd::string,如:

cout << _name << ", the " << _type << " says " << _sound << ".\n"; 
+0

謝謝。感謝幫助。它現在有效。 :) – user3530381

1

的問題是講方法試圖以打印一個字符串對象用printf。

The printf function is not suitable for printing std::string objects。它對char數組起作用,用於表示C語言中的字符串。 如果您想要使用printf,您需要將字符串轉換爲char數組。

printf("%s, the %s says %s.\n", _name.c_str(), _type.c_str(), _sound.c_str()); 

更好的解決方案,將是印在「C++」的方式中的數據,通過使用std ::法院:這可以如下進行

//include declaration at the top of the document 
#include <iostream> 
... 
//outputs the result 
cout <<_name + ", the " + _type + " says " + _sound << "." << endl; 
+0

謝謝。我很感激幫助。它的工作現在。 – user3530381