Ошибка в конструкторах?

 
0
 
C++
ava
sergu | 19.04.2008, 20:15
Написал класс

#include <string>
using namespace std;
class User
{
private:
    unsigned int user_id;
    unsigned int user_name_length;
    unsigned int password_length;
    unsigned int privilege;
    string user_name;
    string password;
public:
    User();
    User(const User &);
    User& operator = (const User& tmp);
    ~User();
    string& GetUserName() {return user_name;}
    string& GetPassword() {return password;}
    unsigned int GetUserId() { return user_id;}
    unsigned int GetPrivilege() { return privilege;}
    unsigned int GetUserNameLength() {return user_name_length;}
    unsigned int GetPasswordLength() {return password_length;}
    void SetUserId(unsigned int id){ user_id = id;}
    void SetUserName(string& new_user_name)
    {
        user_name = new_user_name; 
        user_name_length = user_name.length();
    }
    void SetUserName(const char *new_user_name )
    {
        user_name = new_user_name; 
        user_name_length = user_name.length();
    }
    void SetPassword(string& new_password){ password = new_password;}
    void SetPassword(const char * new_password){ password = new_password;}
    void SetPrivilege(short int new_privilege){ privilege = new_privilege;}
    void SetUserNameLength(unsigned int l = 0)
    {
        if (l == 0) user_name_length = user_name.length();
        else user_name_length = l;
    }
    void SetPasswordLength(unsigned int l = 0)
    {
        if (l == 0) password_length = password.length();
        else password_length = l;
    }

};
User::User()
{
    user_id = 0;
    privilege = 0;
}
//====================================================
User::User(const User &  cpy_user)
{
    user_id = cpy_user.GetUserId();
    user_name_length = cpy_user.GetUserNameLength();
    password_length = cpy_user.GetPasswordLength();
    privilege = cpy_user.GetPrivilege();
    user_name = cpy_user.GetUserName();
    user_name = cpy_user.GetPassword();
}
//====================================================
User& User:: operator = (User& tmp)
{
    if ( this == &tmp ) return *this;
    user_id = tmp.GetUserId();
    user_name_length = tmp.GetUserNameLength();
    password_length = tmp.GetPasswordLength();
    privilege = tmp.GetPrivilege();
    user_name = tmp.GetUserName();
    password = tmp.GetPassword();
}
User::~User()
{
    user_id = 0;
    privilege = 0;
//    user_name.clear();
//    password.clear();
}
void main()
{

}


При компиляции вылазиет ошибка
'GetUserId' : cannot convert 'this' pointer from 'const class User' to 'class User &'
в чем дело?
Ответы (2)
ava
Daevaorn | 19.04.2008, 19:20 #
Внутри конструктора копий, вы вызываете несколько методов объекта cpy_user. Этот объект является константным, а методы нет. Решение: сделать методы которые возвращают данные, но не изменяют их, константными.
ava
archimed7592 | 28.04.2008, 11:03 #
Ага, а делается это так:

string& GetUserName() const {return user_name;}
 ... и далее по аналогии.
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить