Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Fatmarmelad
1 / 1 / 16
Регистрация: 20.02.2016
Сообщений: 421
#1

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

04.06.2017, 14:39. Просмотров 229. Ответов 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 &"
http://www.cyberforum.ru/cpp-beginners/thread1648303.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2017, 14:39
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Где ошибка невозможно преобразовать указатель "this" из "const pers" в "pers &" при выводе объектов через cout (C++):

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

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

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

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года &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;...

3
zss
Модератор
Эксперт С++
6953 / 6515 / 4136
Регистрация: 18.12.2011
Сообщений: 17,184
Завершенные тесты: 1
04.06.2017, 14:44 #2
У меня (VS2008) компилируется без ошибок.
Попробуйте эту строку расписать
C++
1
2
itl->g_out();
itl++;
0
behollder
47 / 28 / 12
Регистрация: 23.01.2013
Сообщений: 125
Завершенные тесты: 1
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
2828 / 2398 / 1052
Регистрация: 29.01.2016
Сообщений: 8,022
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2017, 17:49
Привет! Вот еще темы с решениями:

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

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

Ошибка: "char *concat(char *,.)": невозможно преобразовать аргумент 1 из "const char [4]" в "char *"
делал задание, но на строке 36 строке пишет, что &quot;char *concat(char *,...)&quot;:...

Невозможно преобразовать параметр 1 из "const wchar_t [12]" в "const char *"
Писал программу. Дошел до наложения текстур. Пытаюсь наложить 4-й час. Много...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru