Невозможно отладить преобразование строк в коде C++

Я новичок в концепциях С++ ООП. Проблема, с которой я сталкиваюсь в настоящее время, связана с объявлением строки в функции получения и установки. Я использую eclipse IDE, и я получаю сообщение об ошибке

error: cannot convert 'Student::getname' from type 'std::__cxx11::string (Student::)() {aka std::__cxx11::basic_string<char> (Student::)()}' to type 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}'
return getname;

Код выглядит следующим образом:

#include<iostream>
#include<string.h>
using namespace std;

class Student
{
private:
    int rollno;
    string name;
    string school;
public:

void setrollno(int i)
{
    rollno =i;
}
void setname(string n)
{
    name =n;
}
void setschool(string s)
{
    school =s;
}
int getrollno()
    {
        return rollno;
    }
string getname()
{
    return getname;
}
string getschool()
{
    return school;
}
};
int main()
{
    Student A;
    A.setrollno(3);
    cout << A.getrollno();
    A.setname("vinod");
    cout << A.getname();
    A.setschool("carmel");
    cout << A.getschool();
}

Может ли кто-нибудь сказать мне, в чем проблема?


person vinod    schedule 22.02.2016    source источник
comment
Добро пожаловать в StackOverflow. При вводе вопроса используйте предварительный просмотр, чтобы увидеть, как он выглядит, и правильно отформатируйте код, используя элементы управления форматированием над полем ввода. Ваш исходный вопрос отображался некорректно, и его нужно было исправить.   -  person Jonathan Wakely    schedule 22.02.2016
comment
return getname; Это то, что вы хотели?   -  person Nathan Cooper    schedule 22.02.2016
comment
Прекратите использовать средства доступа раз и навсегда.   -  person SergeyA    schedule 22.02.2016
comment
@NathanCooper: return name; ты это и имел в виду? Код вашего комментария точно такой же, как и в вопросе;)   -  person Sebastian Mach    schedule 22.02.2016
comment
Замените #include<string.h> на #include<string>. string.h объявляет только c-функции для манипулирования массивом символов.   -  person πάντα ῥεῖ    schedule 22.02.2016


Ответы (1)


Имя вашей переменной-члена имени — name, а не getname. Вы должны изменить функцию getname(), чтобы она возвращала правильную переменную-член:

string getname()
{
    return name;
}

Также я предлагаю вам посмотреть const и ссылаться на него, чтобы улучшить свой код. например, вы можете вернуть/передать некоторую ссылку const (&), чтобы избежать копирования. Вот хороший пост, который объясняет это: Передача std::string по значению или ссылке

person Jérôme    schedule 22.02.2016