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

Ошика cannot pass objects of non-trivially-copyable type 'class std::basic_string<char>' through '.'

12.07.2021, 11:14. Показов 3007. Ответов 8

Author24 — интернет-сервис помощи студентам
Добрый день. При выводе векторов у меня компилятор выдает ошибку cannot pass objects of non-trivially-copyable type 'class std::basic_string<char>' through '...'
Подскажите пожалуйста, как исправить или как сделать тоже выведение (что бы выводилась таблица в консоле) через cuot?
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
#include <iostream>
#include <ctime>
#include <cstring> 
#include <vector>
#include <fstream>
#include <iostream>
#include <fstream>
#include <conio.h>
#include <windows.h>
#include <ctime>
#include <algorithm>
using namespace std;
 
 
 
 
 
const int f_name=15, f_datebirth=8, f_country=15, f_club=15, f_yearinclub=23, f_price=15;
const int tablePage=10; // в будущем будем использовать 
    
 
 
 
//Создаём структуру, записываем в [] наши const int, указанные ранее.
struct footballer{
    
    char name[f_name]; // ФИО игрока
    char country[f_country]; // Страна рождения
    char club[f_club]; // Клуб игрока
        
    int birth; // Дата рождения
    int year; // Год начала игры за клуб
    int price; // Стоймость игрока
 
};
 
 
 
 
fstream f; // для создания файлов
char filename[100]; // Переменная имени файла 
 
 
 
 
 
 
void open(){
    
    system("cls");
    opf: // если не сможем найти файл - вернёмся сюда после его создания
    //откпрываем файл
    cout << "Напишите полное имя файла, который хотите открыть ( Например: \"C:\\Users\\Admin\\Desktop\\f.bin\" ): ";
    gets(filename);
 
 
 
    f.open(filename, ios::in | ios::out | ios::binary); //открываем файл для считывания в !бинарном! режиме
          
          //проверка открытия файла. Если не открылся - мы его создадим и дадим пользователю попробовать снова.
        if(!f.is_open()){ //is_open - метод проверки, открыт ли файл и достигнут ли конец строк.
    printf("\n\nОшибка при создании файла, алгоритм создаст его.\a \n\n");
    ofstream ofs(filename); //создали файл - его можно будет считать.
    
    ofs.close(); //И сразу закрываем поток, чтобы выводимые на экран сообщения не записывались в файл.
    printf("Файл создан. Попробуйте снова! \n\n ");
    goto opf; // откат на opf 
    } else {printf(" Файл открыт. \n\n ");}
  
    system("pause");
}
 
 
 
void exit() {
        
     system("cls");// очистка всего экрана
     
 
     if(f.is_open()) //проверили открыт ли файл
     f.close(); // закрыли файл, если он был открыт
     exit(0); // Закрыли программу и вышли!
 
}
 
 
 
 
 
 
 
void dumbfunc()
{
    
string tempclub, tempplayers, tempcountrys;
int k = -1, i;
system("cls");
l1:
footballer zap, zap1, zap2;
int space;
int position=0;
int im=0;
f.clear();
f.seekp(position*tablePage*sizeof(struct footballer),ios::beg);
position*tablePage*sizeof(struct footballer);
system("cls");
 
    cout<<"|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=|\n";
    cout<<"|    |       ФИО       |  Год рождения   |      Стана     |      Клуб      |Год начала игры за клуб|   Цена    |\n";
    cout<<"|====|=================|=================|================|================|=======================|===========|\n";
 
 
vector <int> pricelist;
vector <string> clublist;
vector <string> players;
vector <int> years;
vector <int> yearsclubs;
vector <string> countrys;
 
 
vector <footballer> footprice;
 
while (!f.eof()) 
{
    f.read((char *)&zap, sizeof(struct footballer)); 
    
    tempplayers = string(zap.name);
    tempclub = string(zap.club);
    tempcountrys = string(zap.country);
    
    
    for(i = 0; i < clublist.size(); i++){
            if(clublist[i].find(tempclub) != string::npos){
                
                k = i;
                if(zap.price > pricelist[i]){
                    players[i] = zap.name;
                    years[i] = zap.birth;
                    countrys[i] = zap.country;
                    yearsclubs[i] = zap.year;
                    pricelist[i] = zap.price;
                }
                
                
                
        }
    }
    
    
    
    
    
    
    
    
    if(k==-1){
        players.push_back(zap.name);
        years.push_back(zap.birth);
        countrys.push_back(zap.country);
        clublist.push_back(zap.club);
        yearsclubs.push_back(zap.year);
        pricelist.push_back(zap.price); 
        
        
    }
    
    
    
    
 
 
    k = -1;
}
 
 
    
    for(i = 0; i < clublist.size(); i++){
        printf("|  | %15c | %15d | %5c | %10c | %21d | %9d |\n", players[i],years[i] , countrys[i], clublist[i], yearsclubs[i], pricelist[i]);
        //cout << "|  | %15s | %15d | %5s | %10s | %21d | %9d |\n" <<  players[i] <<  years[i] << countrys[i]<< clublist[i]<< yearsclubs[i]<< pricelist[i];
    }
    
    
    
    
    
    cout<<"|____|_________________|_________________|________________|________________|_______________________|___________|\n";
    cout<<"|   Enter <-- Повторить                                                                  Выход в меню --> Esc |\n";
    cout<<"|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=|\n";
 
l2:
int go=getch();
if (go==13) 
{
goto l1;
}
if (go==27) 
{
goto exit6;
}
else
{
goto l2;
}
exit6:;
 
 
} 
 
 
 
 
 
 
 
int main(){
 
    SetConsoleCP(1251); 
    SetConsoleOutputCP(1251);
    footballer zap;
 
   
 
   
    open();
    
    
    dumbfunc();
    
    
    
    exit();
    system ("pause");
    return 0;
}
(Место ошибки dumbfunc(), for выведения векторов)
Извиняюсь что нет комментариев к функции, она еще не готова полностью
К коду прилагаю файл с уже вписанными футболистами f.bin в архиве.(Просто закинуть файл не удалось, ругается загрузчик форума)
Вложения
Тип файла: rar Архив WinRAR.rar (459 байт, 2 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.07.2021, 11:14
Ответы с готовыми решениями:

(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&
astxx::manager::connection::connection(std::basic_string&lt;char, std::char_traits&lt;char&gt;,...

ошибка в программе (cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*')
int main() { string fileName, currWord, currMax = &quot;&quot;; cin&gt;&gt;fileName; ...

Cannot pass objects of non-POD type
Создаю контейнер std::unordered_map&lt;std::string, sers&gt; on_us Создаю итератор:...

Странная ошибка: [Error] no match for call to '(std::string {aka std::basic_string<char>}) (int&)'
У меня появляется проблема при компиляции сей программы: #include &lt;iostream&gt; #include &lt;string&gt;...

8
124 / 44 / 15
Регистрация: 01.11.2020
Сообщений: 122
12.07.2021, 11:49 2
Программу не смотрел особо. судя по ошибке
Цитата Сообщение от ShiloJunior Посмотреть сообщение
Ошика cannot pass objects of non-trivially-copyable type 'class std::basic_string<char>' through '.'
неверный спецификатор типа для printf
где то что-то такое
C++
1
2
  std::string str = "go to home!";
  std::printf("%c", str);  // cannot pass non-trivial object of type 'std::string' (aka 'basic_string<char>') to....
0
фрилансер
5499 / 5095 / 1047
Регистрация: 11.10.2019
Сообщений: 13,345
12.07.2021, 11:50 3
Лучший ответ Сообщение было отмечено ShiloJunior как решение

Решение

ShiloJunior, это предупреждение - неправильно передаёшь параметры в printf

попробуй так
C++
1
        printf("|  | %15s | %15d | %5s | %10s | %21d | %9d |\n", players[i].c_str(),years[i] , countrys[i].c_str(), clublist[i].c_str(), yearsclubs[i], pricelist[i]);
а потом переходи уже на std::cout
0
124 / 44 / 15
Регистрация: 01.11.2020
Сообщений: 122
12.07.2021, 11:53 4
необходим символ , а аргумент поставили типа std::string
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
12.07.2021, 11:59 5
код запредельно грязный.
у компилятора ворнингов больше, чем самого кода получается.

например:

Цитата Сообщение от ShiloJunior Посмотреть сообщение
int position=0;
int im=0;
f.clear();
f.seekp(position*tablePage*sizeof(struct footballer),ios::beg);
position*tablePage*sizeof(struct footballer);
у тебя position равна нулю.
тогда чему будет равна вся эта колбаса: position*tablePage*sizeof(struct footballer) ?

ты вообще отдаёшь себе отчет в том, что ты делаешь, и зачем?
в чем сакральный смысл 105 строки?
0
0 / 0 / 0
Регистрация: 09.07.2021
Сообщений: 4
12.07.2021, 16:48  [ТС] 6
Тоже самое. Я пробовал и так и так, но в итоге не выводит. Нормально вывелось только с cout
Миниатюры
Ошика cannot pass objects of non-trivially-copyable type 'class std::basic_string<char>' through '.'  
0
0 / 0 / 0
Регистрация: 09.07.2021
Сообщений: 4
12.07.2021, 16:49  [ТС] 7
Код к сожалению не я полностью пишу. Мне дали уже полу готовый код и сказали переделай под эту задачу. Полностью моя часть там началась с прохода по файлу и заканчивается выводом решения
0
фрилансер
5499 / 5095 / 1047
Регистрация: 11.10.2019
Сообщений: 13,345
12.07.2021, 16:57 8
Цитата Сообщение от ShiloJunior Посмотреть сообщение
Тоже самое. Я пробовал и так и так
внимательно в пост №3 : c_str()
0
0 / 0 / 0
Регистрация: 09.07.2021
Сообщений: 4
12.07.2021, 17:01  [ТС] 9
Извиняюсь, устал и сразу не увидел правки. Все работает. Спасибо
0
12.07.2021, 17:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.07.2021, 17:01
Помогаю со студенческими работами здесь

ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri
на вод поступают 2 строки типа string. определить количество вхождений строки 2 в строку 1 ошибка...

Ошибка при компиляции std::__cxx11::basic_string<char
День добрый возникла необходимость собрать одну старую программу написанную ещё во времена GCC4x...

Error: no matching function for call to 'std::basic_string<char>::find
if (find(Op.begin(), Op.end(), 'V') != Op.end() &amp;&amp; expression!=&quot;exp&quot;) { ...

Ошибка: no matching function for call to 'Slovare<std::basic_string<char> >::show()'
Помогите исправить ошибку. Программа должна при нажатии 3 выводить итог, но при построении выходит...

Error LNK2019: ссылка на неразрешенный внешний символ "class std::basic_ostream<char,struct std::
Здравствуйте! Сразу попрошу прощения за тупой вопрос. Почему при перегрузке operator &lt;&lt; код...

Как исправить ошибку "No viable conversion from std::_1::basic_string<char> to bool"?
Здравствуйте. Начала изучение С плюсов по книге Страуструпа. Пытаюсь выполнять каждый разобранный...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru