34 / 10 / 2
Регистрация: 20.02.2016
Сообщений: 1,503
1

Где ошибка невозможно преобразовать указатель "this" из "const pers" в "pers &" при выводе объектов через cout

04.06.2017, 14:39. Показов 4563. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Переписал код из книг Лафоре, создание мультимножества из собственных объектов- справочник телефонный, с именем и фамилией.
Выдаёт ошибку невозможно преобразовать указатель "this" из "const pers" в "pers &"
Сравнил с тем ,что в книге, вроде всё на месте. В чём может быть ошибка?
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
#include<iostream>
#include<string>
#include<set>
using namespace std;
class pers
{
private:
    string name;
    string surname;
    int phone;
public:
    pers() :name(), surname(), phone(){};
    pers(string n,string s,int ph) :name(n), surname(s), phone(ph){};
 
    void g_out()
    {
        cout << name << " "
            << surname << " "
            << phone << endl;
 
    }
 
    friend bool operator<(const pers&, const pers&);
    friend bool operator==(const pers&, const pers&);
};
bool operator<(const pers& p1, const pers& p2)
{
    if (p1.name == p2.name)
        return (p1.surname == p2.surname) ? true : false;
    return (p1.name < p2.name) ? true : false;
}
bool operator==(const pers& p1, const pers& p2)
{
    return(p1.name == p2.name
        && p1.surname == p2.surname) ? true : false;
}
 
 
int main()
 
{
    pers ps1("Jois", "Victor", 987502854);
    pers ps2("Eron", "Shairon",953235659 );
    pers ps3("Boi", "Marc", 953235659);
    pers ps4("Star", "John", 953274859);
    pers ps5("Balioman", "Arthur", 973235688);
    pers ps6("Ferman", "Saddic", 967235659);
    pers ps7("Furvan", "Sandra", 957777759);
    pers ps8("Ashi", "Luisa", 953888859);
    multiset<pers,less<pers>>drct;
    multiset<pers, less<pers>>::iterator itl;
    drct.insert(ps1);
    drct.insert(ps2);
    drct.insert(ps3);
    drct.insert(ps4);
    drct.insert(ps5);
    drct.insert(ps6);
    drct.insert(ps7);
    drct.insert(ps8);
 
    
        itl = drct.begin();
        while (itl != drct.end())
        {
            (*itl++).g_out();
        }
 
 
    system("pause");
    return 0;
}
В строке 65
error C2662: void pers::g_out(void): невозможно преобразовать указатель "this" из "const pers" в "pers &"
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2017, 14:39
Ответы с готовыми решениями:

Ошибка при сборке многофайлового проекта: "невозможно преобразовать "int" в "const golf"
Сделал многофайловую программу программу, вот она: //golf.h #include &lt;iostream&gt; #ifndef golg_h_...

Error C2440: return: невозможно преобразовать "const char *" в "const char (&)[6]"
Вроде все правильно а все равно не работает. Подскажите в чем ошибка #include &lt;iostream&gt; ...

Error C2664: RegisterClassW: невозможно преобразовать параметр 1 из "WNDCLASSEX *" в "const WNDCLASSW *"
почему выдаёт ошибку? int RegClass(WNDPROC Proc,LPCTSTR szName,UINT brBackground){ WNDCLASSEX...

Ошибка "невозможно преобразовать аргумент 1 из "Myclass" в "double""
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cmath&gt; using namespace std; class Myclass {...

3
Модератор
Эксперт С++
13111 / 10381 / 6209
Регистрация: 18.12.2011
Сообщений: 27,764
04.06.2017, 14:44 2
У меня (VS2008) компилируется без ошибок.
Попробуйте эту строку расписать
C++
1
2
itl->g_out();
itl++;
0
47 / 28 / 12
Регистрация: 23.01.2013
Сообщений: 125
04.06.2017, 16:33 3
потому что в этих контейнерах нельзя изменять объекты напрямую(а ты вызываешь не конст функцию которая, как предполагается, изменяет объект).
вот из стандарта 23.2.4 Associative containers
5. For set and multiset the value type is the same as the key type. For map and multimap it is equal to
pair<const Key, T>. Keys in an associative container are immutable.

6. iterator of an associative container is of the bidirectional iterator category. For associative containers where
the value type is the same as the key type, both iterator and const_iterator are constant iterators.
1
nd2
3434 / 2813 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
04.06.2017, 17:49 4
Лучший ответ Сообщение было отмечено Fatmarmelad как решение

Решение

Цитата Сообщение от behollder Посмотреть сообщение
ты вызываешь не конст функцию
C++
1
2
3
4
5
6
7
    void g_out() const
    {
        cout << name << " "
            << surname << " "
            << phone << endl;
 
    }
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2017, 17:49
Помогаю со студенческими работами здесь

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;,...

Error C2664: atoi: невозможно преобразовать параметр 1 из "_TCHAR *" в "const char *" Как исправить эту ошибку в коде?
#include &quot;stdafx.h&quot; #define _XOPEN_SOURCE 500 #include &lt;conio.h&gt; #include &lt;stdio.h&gt;...

Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *"
string s = &quot;555 44 55 66&quot;;//размер строки заранее неизвестен char* p =...

невозможно преобразовать параметр 1 из "const char [8]" в "LPCWSTR"
msoftcon.h //msoftcon.h //declarations for Lafore's console graphics functions //uses Window's...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru