Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 15.05.2023
Сообщений: 4

Не удается инициализировать ссылку типа "Person *&"

15.05.2023, 12:47. Показов 2469. Ответов 7

Студворк — интернет-сервис помощи студентам
выдает ошибку не удается инициализировать ссылку типа "Person *&" (квалифицируется как неконстантная) со знанием типа std::string
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#include <iostream>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <array>
#include <vector>
#include <algorithm>
#include <chrono>
 
const int ALPHABET = 75 + 16;
 
struct Person {
    std::string phone;
    std::string name;
    std::string gosnomer;
    std::string model;
};
 
void read(Person*& persons, int& q) //читает с Файла input
{
    char buff[50];
    std::ifstream fin;
    fin.open("C:/Users/User/source/repos/Project23/input.txt");
    if (!fin.is_open())
        std::cout << "Error - there is no file";
    else
    {
        fin >> buff;
        q = std::stoi(buff);
        persons = new Person[q];
 
        for (int i = 0; i < q; ++i)
        {
            fin >> buff;
            persons[i].phone = buff;
            persons[i].phone += " ";
            fin >> buff;
            persons[i].phone += buff;
 
            fin >> buff;
            persons[i].name = buff;
            persons[i].name += " ";
            fin >> buff;
            persons[i].name += buff;
            persons[i].name += " ";
            fin >> buff;
            persons[i].name += buff;
 
            fin >> buff;
            persons[i].gosnomer = buff;
            persons[i].gosnomer += " ";
            fin >> buff;
            persons[i].gosnomer += buff;
            persons[i].gosnomer += " ";
            fin >> buff;
            persons[i].gosnomer += buff;
 
            fin >> buff;
            persons[i].model = buff;
            persons[i].model += " ";
            fin >> buff;
            persons[i].model += buff;
        }
        fin.close();
    }
}
 
void write(std::vector<Person> persons1, std::vector<Person> persons2, int q1, int q2, int time1, int time2) //запись в Файл Output1 и Output2
{
    std::ofstream fout1;
    std::ofstream fout2;
    fout1.open("C:/Users/User/source/repos/Project23/output1.txt");
    fout2.open("C:/Users/User/source/repos/Project23/output2.txt");
 
    fout1 << time1 << std::endl;
    fout2 << time2 << std::endl;
    for (int i = 0; i < q1; ++i)
    {
        fout1 << persons1[i].phone << " " << persons1[i].name << " " << persons1[i].gosnomer << " " << persons1[i].model << std::endl;
    }
 
    for (int i = 0; i < q2; ++i)
    {
        fout2 << persons2[i].phone << " " << persons2[i].name << " " << persons2[i].gosnomer << " " << persons2[i].model << std::endl;
    }
 
    fout1.close();
    fout2.close();
}
 
 
 
bool directAlg(const std::string& text, const std::string& pattern) //алгоритм сравнения прямого поиск
{
    for (int i = 0; i < text.length() - pattern.length() + 1; i++)
    {
        for (int j = 0; j < pattern.length(); j++)
        {
            if (pattern[j] != text[i + j])
                break;
            else if (j == pattern.length() - 1)
            {
                return true;
            }
        }
    }
    return false;
}
 
void direct(std::string patterns, Person*& persons, int q, int k, std::vector<Person>& out, int& qOut, int& time) //Прямой поиск
{
    auto start = std::chrono::high_resolution_clock::now();
 
    for (int i = 0; i < q; ++i)
    {
        int name = 0;
        int model = 0;
        for (int j = 0; j < patterns.size(); ++j) {
            if (directAlg(persons[i].name, patterns)) name++;
            if (directAlg(persons[i].model, patterns)) model++;
        }
 
        if (name >= k && model >= k)
        {
            out.push_back(persons[i]);
            qOut++;
        }
    }
 
    auto stop = std::chrono::high_resolution_clock::now();
    auto duration = std::chrono::duration_cast<std::chrono::microseconds>(stop - start);
    time = duration.count();
}
 
 
 
int main() {
    std:: string patterns = { "Aisen",};
    int k = 1;
 
    std::vector<Person> output1; 
    std::vector<Person> output2;
    int q1 = 0;
    int q2 = 0;
    int time1 = 0;
    int time2 = 0;
 
    int q;
    Person* persons;
    read(persons, q);
    for (int i; i < q; i++ ) {
        direct(patterns, persons[i].name, q, k, output2, q2, time2);
    }
    write(output1, output2, q1, q2, time1, time2);
 
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.05.2023, 12:47
Ответы с готовыми решениями:

Мультимап: "не удается инициализировать ссылку значением"
подскажите как исправить Ошибка (активно) E0434 не удается инициализировать ссылку типа &quot;std::multimap&lt;std::string, book,...

Создайте класс person. Создайте тип people, описывающий массив элементов типа person.
Создайте класс person. У него должны быть поля: name: string; sex: (&quot;муж&quot;, &quot;жен&quot;); height: 100..220. Кроме того, создайте тип people,...

Валидатор указывает на ошибочную ссылку, вместо & нужно & amp
Использую браузер FF 8.0, на нем установлен HTML Vallidator. Так вот этот валидатор ругается типо я неправильно указываю ссылку, я пишу...

7
Модератор
 Аватар для long399
2882 / 1836 / 933
Регистрация: 16.10.2013
Сообщений: 5,240
Записей в блоге: 15
15.05.2023, 13:29
В строке 154 вторым аргументом в функцию вы передаете строку, хотя функция ожидает не её.
0
79 / 60 / 22
Регистрация: 14.12.2022
Сообщений: 240
15.05.2023, 13:39
Цитата Сообщение от long399 Посмотреть сообщение
В строке 154 вторым аргументом в функцию вы передаете строку, хотя функция ожидает не её.
там все несклько хуже.
чисто чтобы поправит компиляцию сигнатуру надо поправить:
void direct(std::string patterns, Person*& persons, int q, int k, std::vector<Person>& out, int& qOut, int& time) //Прямой поиск
на
void direct(std::string patterns, const Person* persons, int q, int k, std::vector<Person>& out, int& qOut, int& time) //Прямой поиск

и в цикле поправить вызов + не забыть i проинициализировать:
C++
1
2
3
4
  for (int i = 0; i < q; i++) {
    //direct(patterns, persons[i].name, q, k, output2, q2, time2);
    direct(patterns, &persons[i], q, k, output2, q2, time2);
  }
смысл передачи указателя в функцию и использование его как указатель на некий массив я не пытался понять

кроме этого если файла на чтение нет - ошибка лишь печатается и выполнение дальше идет себе и благополучно крашится
0
86 / 60 / 12
Регистрация: 06.06.2013
Сообщений: 216
15.05.2023, 13:47
Ох, вау.
Конкретно по ошибке - достаточно void read(Person* persons, int& q), но это все равно очень криво... Не лучше ли было в read скармливать путь к файлу по константной ссылке, а внутри - формировать и возвращать вектор? Размер массива в данном случае не потребуется, так как вектор сам знает свой размер.
Но лучше вовсе вернуться к изучению ссылок, указателей и передачи аргументов в функции. Ну и про высокоуровневые контейнеры до кучи. Кстати, может я что-то не увидел с телефона, но походу в следующей итерации функция write будет вылетать.
0
0 / 0 / 0
Регистрация: 15.05.2023
Сообщений: 4
15.05.2023, 13:50  [ТС]
в смысле проинициализировать я не понял

Добавлено через 1 минуту
Мне нужно чтобы паттерн "Айсен" искал в стрктуре person.name. Как это сделать не понимаю
0
79 / 60 / 22
Регистрация: 14.12.2022
Сообщений: 240
15.05.2023, 13:54
Цитата Сообщение от AiZen6666 Посмотреть сообщение
в смысле проинициализировать я не понял
for (int i = 0; i < q; i++) { -> for (int i = 0; i < q; i++) {

Цитата Сообщение от AiZen6666 Посмотреть сообщение
Мне нужно чтобы паттерн "Айсен" искал в стрктуре person.name. Как это сделать не понимаю
из этого предложения ничего не понятно. а из кода - тем более, там бред какой-то. поэтому если хочешь, чтобы что-то дельное тебе отвтеили - расписывай добробно изначальную задачу
0
0 / 0 / 0
Регистрация: 15.05.2023
Сообщений: 4
15.05.2023, 15:12  [ТС]
в файле:
номер телефона, фио, госномер, наименование марки и модели транспортного средства
искать в полях:
фио, наименование марки и модели транспортного средства

Я реализую прямой поиск в файле. Я хочу найти паттерн в Фио и записать в Output2
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#include <iostream>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <array>
#include <vector>
#include <algorithm>
#include <chrono>
 
const int ALPHABET = 75 + 16;
 
struct Person {
    std::string phone;
    std::string name;
    std::string gosnomer;
    std::string model;
};
 
void read(Person*& persons, int& q) //читает с Файла input
{
    char buff[50];
    std::ifstream fin;
    fin.open("C:/Users/User/source/repos/Project23/input.txt");
    if (!fin.is_open())
        std::cout << "Error - there is no file";
    else
    {
        fin >> buff;
        q = std::stoi(buff);
        persons = new Person[q];
 
        for (int i = 0; i < q; ++i)
        {
            fin >> buff;
            persons[i].phone = buff;
            persons[i].phone += " ";
            fin >> buff;
            persons[i].phone += buff;
 
            fin >> buff;
            persons[i].name = buff;
            persons[i].name += " ";
            fin >> buff;
            persons[i].name += buff;
            persons[i].name += " ";
            fin >> buff;
            persons[i].name += buff;
 
            fin >> buff;
            persons[i].gosnomer = buff;
            persons[i].gosnomer += " ";
            fin >> buff;
            persons[i].gosnomer += buff;
            persons[i].gosnomer += " ";
            fin >> buff;
            persons[i].gosnomer += buff;
 
            fin >> buff;
            persons[i].model = buff;
            persons[i].model += " ";
            fin >> buff;
            persons[i].model += buff;
        }
        fin.close();
    }
}
 
void write(std::vector<Person> persons1, std::vector<Person> persons2, int q1, int q2, int time1, int time2) //запись в Файл Output1 и Output2
{
    std::ofstream fout1;
    std::ofstream fout2;
    fout1.open("C:/Users/User/source/repos/Project23/output1.txt");
    fout2.open("C:/Users/User/source/repos/Project23/output2.txt");
 
    fout1 << time1 << std::endl;
    fout2 << time2 << std::endl;
    for (int i = 0; i < q1; ++i)
    {
        fout1 << persons1[i].phone << " " << persons1[i].name << " " << persons1[i].gosnomer << " " << persons1[i].model << std::endl;
    }
 
    for (int i = 0; i < q2; ++i)
    {
        fout2 << persons2[i].phone << " " << persons2[i].name << " " << persons2[i].gosnomer << " " << persons2[i].model << std::endl;
    }
 
    fout1.close();
    fout2.close();
}
 
 
 
bool directAlg(const std::string& text, const std::string& pattern) //алгоритм сравнения прямого поиск
{
    for (int i = 0; i < text.length() - pattern.length() + 1; i++)
    {
        for (int j = 0; j < pattern.length(); j++)
        {
            if (pattern[j] != text[i + j])
                break;
            else if (j == pattern.length() - 1)
            {
                return true;
            }
        }
    }
    return false;
}
 
void direct(std::string patterns, const Person* persons, int q, int k, std::vector<Person>& out, int& qOut, int& time) //Прямой поиск
{
    auto start = std::chrono::high_resolution_clock::now();
 
    for (int i = 0; i < q; ++i)
    {
        int name = 0;
        int model = 0;
        for (int j = 0; j < patterns.size(); ++j) {
            if (directAlg(persons[i].name, patterns)) name++;
            if (directAlg(persons[i].model, patterns)) model++;
        }
 
        if (name >= k && model >= k)
        {
            out.push_back(persons[i]);
            qOut++;
        }
    }
 
    auto stop = std::chrono::high_resolution_clock::now();
    auto duration = std::chrono::duration_cast<std::chrono::microseconds>(stop - start);
    time = duration.count();
}
 
 
 
int main() {
    std:: string patterns = { "Aisen",};
    int k = 1;
 
    std::vector<Person> output1; 
    std::vector<Person> output2;
    int q1 = 0;
    int q2 = 0;
    int time1 = 0;
    int time2 = 0;
 
    int q;
    Person* persons;
    read(persons, q);
    for (int i = 0; i < q; i++) {
        direct(patterns, persons[i].name, q, k, output2, q2, time2);
    }
    write(output1, output2, q1, q2, time1, time2);
 
    return 0;
}
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
15.05.2023, 16:23
Строка 154, в функцию надо подавать только указатель на обьект структуры, а не на поле этой структуры
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.05.2023, 16:23
Помогаю со студенческими работами здесь

Не удается неявно преобразовать тип void в Person
class Person { public string name { get; set; } public string surname { get; set; } public System.DateTime birthdate {...

query='SELECT * FROM resume WHERE ' & ''' & RecSet('place')& ''' & '=' & '''& s_loc &''' & - что не так?
упростил для краткости запрос. в чем ошибка? RecSet - это коннекшн. query='SELECT * FROM resume WHERE ' &amp; ''' &amp;...

Не удается инициализировать SSD
всем привет. Была у меня в одно время традиция, всем клиентам устанавливал SSD Silicon Power. И вот, все как один начали приносить...

Не удается инициализировать набор
class Tables { public class Flag_Type { string name; long bit; bool...

Не удается инициализировать параметр с char*
Не могу инициализировать параметр char. Смотрел зарубежные форумы, ничего не помогло. Проблема в 8 строчке кода. void __fastcall...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru