2016-05-27 2 views
2

Я новичок в C++ и следую онлайн-учебнику, я скопировал этот код парней несколько раз и не могу понять, что не так. он просто выводит искаженный текст.строка поток вопрос, я думаю, что мой код выглядит хорошо, но он отображает странные символы

Я использую код :: Blocks

Это то, что он выдает (по ссылке ниже)

https://gyazo.com/9c2786ef20fb3878354a72904d126f7e

Мой реальный код

main.cpp

#include <iostream> 
#include "Person.h" 

using namespace std; 

int main() 
    { 
Person person; 

cout << person.toString() << endl; 


return 0; 
} 

Person.cpp

#include "Person.h" 
#include <sstream> 

Person::Person() 
{ 
age = 0; 
name = "jeff"; 

} 

string Person::toString(){ 
stringstream ss; 

ss << "Name: "; 
ss << name; 
ss << "; age: "; 
ss << age; 


} 

Person.h

#ifndef PERSON_H 
#define PERSON_H 

#include <iostream> 

using namespace std; 


class Person{ 
private: 
string name; 
int age; 

public: 
Person(); 

string toString(); 

}; 

#endif // PERSON_H 
+0

Включите предупреждения в своем компиляторе. Он скажет вам, что здесь не так (функция non-void без оператора return.) – Kundor

ответ

4

У вас было две проблемы с вашим кодом. Вы никогда не возвращали значение, а также должны использовать stringstream.str():

int main() 
{ 
    Person person; 

    cout << person.toString() << endl; 

    return 0; 
} 

string Person::toString() { 
    stringstream ss; 

    ss << "Name: "; 
    ss << name; 
    ss << "; age: "; 
    ss << age; 

    return ss.str(); 
} 
+0

Я думаю, было бы более ясно оставить 'toString' как возвращающую строку и перемещение' rdbuf' внутри функции. (Или возможно, вместо этого вызывается 'str'. –

+0

@ TheDark Я сделал обновление. –

+0

ahh, мы просто добавляем ** return ss.str(); ** удалось исправить эту ошибку. – newToCpp

Смежные вопросы