Форум программистов, компьютерный форум CyberForum.ru

Метод, ошибка this - C++

Восстановить пароль Регистрация
 
balrak
6 / 6 / 1
Регистрация: 01.04.2012
Сообщений: 81
08.06.2012, 20:11     Метод, ошибка this #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <iostream>
#include <string>
#include <fstream>
 
class SickKoala
{
private:
    std::string name;
public:
    std::string getName();
    SickKoala(const std::string &);
    ~SickKoala();
    void poke();
    bool takeDrug(const std::string &);
    void overDrive(std::string &);
};
 
std::string SickKoala::getName()
{
    return this->name;
}
 
SickKoala::SickKoala(const std::string & s)
{
    name = s;
}
 
SickKoala::~SickKoala()
{
    std::cout << "Mr. " << name <<": Kreogg!!  I am healthy!!\n";
}
 
void SickKoala::poke()
{
    std::cout << "Mr. "<< name <<": Gooeeeeerrk !! :’(\n";
}
 
bool SickKoala::takeDrug(const std::string & s)
{
    if(!stricmp(s.c_str(), "mars"))
    {
        std::cout << "Mr. " << name <<": Mars, and it Kreog !\n";
        return true;
    }
    else if(s == "Buronzand")
    {
        std::cout << "Мr. " << name << ": I'm so weak !\n";
        return true;
    }
    std::cout << "Мr. " << name << ": Goerk !\n";
    return false;
}
 
void SickKoala::overDrive(std::string & s)
{
    size_t  found = s.find("Kreog !");
    do
    {
        s.replace(int(found), 7, "1337 !");
        found = s.find("Kreog !",found+1);
    }while(found != std::string::npos);
    std::cout << "Mr. " << name << ": " << s << std::endl;
}
 
class Sister
{
private:
    int id;
    std::string status;
    unsigned int callCount;
public:
    Sister(const int);
    ~Sister();
    void giveDrug(const std::string &, const SickKoala*);
    std::string readReport(const std::string &);
    void timeCheck();
};
 
Sister::Sister(const int id)
{
    this->id = id;
    this->callCount = 0;
}
 
Sister::~Sister()
{
    std::cout << "Nurse " << this->id << " : At last, a little leasure time!\n";
}
 
void Sister::giveDrug(const std::string & s, const SickKoala* p)
{
 
}
 
std::string readReport(const std::string & s)
{
    std::ifstream file(s);
    std::string pilos;
    if(!file)
    {
        std::cout << "Cant open file\n";
        return pilos;
    }
    std::getline(file, pilos);
    if(pilos == "")
    {
        std::cout << "File is empty\n";
        return pilos;
    }
    else
        std::cout << "Nurse " << this->id << " : Kreog ! I have to give " << pilos << " to Mr. " << SickKoala::getName() << " !\n"; \\ тут не работате
    return pilos;
}
 
void Sister::timeCheck()
{
    if(this->callCount == 0)
    {
        std::cout << "Nurse " << this->id << " : I get to work!\n";
        this->callCount = 1;
    }
    else
    {
        std::cout << "Nurse " << this->id << " : I get back to my eucalyptus forest!\n";
        this->callCount = 0;
    }
}
 
int main()
{
    SickKoala koala("Shorty");
    std::string s = "MARS"; 
    koala.takeDrug(s);
}
'this' : can only be referenced inside non-static member functions
1>c:\users\oleynik\documents\visual studio 2010\projects\strange_man\strange_man\koala.cpp(111): error C2227: left of '->id' must point to class/struct/union/generic type
1>c:\users\oleynik\documents\visual studio 2010\projects\strange_man\strange_man\koala.cpp(111): error C2352: 'SickKoala::getName' : illegal call of non-static member function
1> c:\users\oleynik\documents\visual studio 2010\projects\strange_man\strange_man\koala.cpp(10) : see declaration of 'SickKoala::getName'

Не могу понять в чем дело
нужна помошь
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
08.06.2012, 20:23     Метод, ошибка this #2
this - может присутствовать только в методе класса. Функция readReport им не является.
balrak
6 / 6 / 1
Регистрация: 01.04.2012
Сообщений: 81
08.06.2012, 20:26  [ТС]     Метод, ошибка this #3
Цитата Сообщение от balrak Посмотреть сообщение
class Sister
{
private:
* * int id;
* * std::string status;
* * unsigned int callCount;
public:
* * Sister(const int);
* * ~Sister();
* * void giveDrug(const std::string &, const SickKoala*);
* * std::string readReport(const std::string &);
* * void timeCheck();
};
как єто не является? я тупо не вижу , покажи где пажалуста
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
08.06.2012, 20:30     Метод, ошибка this #4
вместо std::string readReport(const std::string & s)
надо std::string Sister::readReport(const std::string & s)
в определении
balrak
6 / 6 / 1
Регистрация: 01.04.2012
Сообщений: 81
08.06.2012, 21:31  [ТС]     Метод, ошибка this #5
ппц )
ну как так можно
спасибо

Добавлено через 58 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
std::string Sister::readReport(const std::string & s)
{
    std::ifstream file(s);
    std::string pilos;
    if(!file)
    {
        std::cout << "Cant open file\n";
        return pilos;
    }
    std::getline(file, pilos);
    if(pilos == "")
    {
        std::cout << "File is empty\n";
        return pilos;
    }
    else
        std::cout << "Nurse " << this->id << " : Kreog ! I have to give " << pilos << " to Mr. " << SickKoala::getName() << " !\n";
    return pilos;
}
ошибка теперь тут
почему я не могу обратится к этому элементу SickKoala::getName() ?
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
08.06.2012, 21:35     Метод, ошибка this #6
потому что SickKoala::getName() это не статическая функция. Чтобы ее вызвать должен быть объект класса SickKoala, для которого эта функция будет вызываться.
balrak
6 / 6 / 1
Регистрация: 01.04.2012
Сообщений: 81
08.06.2012, 21:41  [ТС]     Метод, ошибка this #7
а как мне в этом случае достать имя из SickKoala?
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
08.06.2012, 21:45     Метод, ошибка this #8
Я не понимаю логику вашей программы, поэтому помочь не могу.
Могу лишь сказать, что SickKoala это класс, а не объект, и у него нету имени, получаемого с помощью getName. Нужно создать объект класса SickKoala и как-то передать объекту класса Sister.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2012, 22:04     Метод, ошибка this
Еще ссылки по теме:

Дружественный метод класса и ошибка доступа C++
Ошибка в цикле итераций - метод простой итерации C++
C++ Метод Эйлера (решение дифференциального уравнения). Ошибка. Написание программы

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
balrak
6 / 6 / 1
Регистрация: 01.04.2012
Сообщений: 81
08.06.2012, 22:04  [ТС]     Метод, ошибка this #9
этот метод должен возращать имя бoльного(класс SickKoala)

Добавлено через 16 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
std::string Sister::readReport(const std::string & s, SickKoala* p)
{
    std::ifstream file(s);
    std::string pilos;
    if(!file)
    {
        std::cout << "Cant open file\n";
        return pilos;
    }
    std::getline(file, pilos);
    if(pilos == "")
    {
        std::cout << "File is empty\n";
        return pilos;
    }
    else
        std::cout << "Nurse " << this->id << " : Kreog ! I have to give " << pilos << " to Mr. " << (*p).getName() << " !\n";
    return pilos;
}
сделал так
спасибо за помошь
Yandex
Объявления
08.06.2012, 22:04     Метод, ошибка this
Ответ Создать тему
Опции темы

Текущее время: 04:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru