Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 19.11.2017
Сообщений: 113
1

Ошибка: E2093 operator '<' not implemented in type 'myString' for arguments of the same type

13.03.2018, 23:45. Просмотров 1060. Ответов 20


Пишет [C++ Error]_function_base.h(73):E2093'operator<'not implemented in type 'myString' for arguments of the same type
выдавал так же ещё одну ошибку в строке if (i<ve.size()) поэтому пришлось поставить unsigned, ибо шло сравнение signed and unsignet. Там проблемы в самом конце кода, верхушка работает.
последний кусок кода должен удалять элементы вектора, которые уже встречались в нём


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
#include<iostream>
#include<string> // библиотека для использования строк и их функций
#include<vector> //библиотека для использования вектора и его функций
#include<algorithm> //библиотека для дальнейшей сортировки вектора
using namespace std;
 
// 1 задание -----------------------
class myString{ //создание класса
public:
char str[128]; //массив типа char
void count();//функция, считающая длину строки
};       //закытие класса
void myString::count()//описание функции
{
cout<<"Строка состоит из "<<strlen(str)<<" символов!"<<endl;
}    //функция strlen считает длину строки, указанной в круглых скобках
int main(){
system("chcp 1251");
myString m;
cout<<"Введите строку: ";
cin.getline(m.str, 128);//используется cin.getline для полной "прочитки" строки
m.count();             //т.к.cin читает только до первого пробела
 
//2 задание------------------------------
vector <myString> ve(10); //создание вектора из 10 элементов
for (int i=0; i<10; i++)  //цикл для заполнения вектора
cin.getline(ve[i].str, 128);
for (int i=0; i<10; i++)  //вывод вектора на экран
cout<<ve[i].str<<' ';
cout<<endl;
 
//3 задание------------------------------
unsigned i;
sort (ve.begin(), ve.end()); //сортировка
string previous= " "; //предыдущее слово
string current; //текущее слово
for (unsigned i=0; i<10; i++){
current=ve[i].str;
if (previous == current){//совпадает ли слово с предыдущим
if (i<ve.size())
{
ve.erase(ve.begin()+i);
}
//удаление этого элемента
previous = current;
cout<<"новый вектор: "<<ve[i].str<<" ";
}}
system("pause");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.03.2018, 23:45
Ответы с готовыми решениями:

E2094 'operator<<' not implemented in type 'ostream' for arguments of type 'Binary'
Здравствуйте, уважаемые форумчане, выкидываю код: #include &lt;iostream&gt; #include &lt;string&gt; #include...

С++ not implemented in type 'istream' for arguments of type 'float *'из-за чего эта ошибка и как исправить?
Написал программу для расчёта площади четырёхугольника и круга. Использовал простые операторы...

Multimap. Ошибка operator+ not implemented in type multimap
Я начинающий в си, есть задача подсчета частоты встречаемости символов, делал через ассоциативный...

Ошибка в C++ Builder ( 'operator<<' not implemented in type 'Pages' for arguments of type)
Доброго времени суток! помогите пожалуйста, у меня не выводит из контейнера map. #include...

__________________
Помогаю в написании студенческих работ здесь.
Записывайтесь на профессиональные курсы C++ разработчиков
20
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
13.03.2018, 23:55 2
Цитата Сообщение от goboloz Посмотреть сообщение
sort (ve.begin(), ve.end()); //сортировка
как алгоритм сортировки должен сравнивать ваши объекты типа myString? вот компилятор и пишет, что operator< без определения. либо определяете его в классе, либо пишете функтор сравнения в 3й параметр сортировки
0
0 / 0 / 0
Регистрация: 19.11.2017
Сообщений: 113
13.03.2018, 23:57  [ТС] 3
Цитата Сообщение от mat_for_c Посмотреть сообщение
как алгоритм сортировки должен сравнивать ваши объекты типа myString? вот компилятор и пишет, что operator< без определения. либо определяете его в классе, либо пишете функтор сравнения в 3й параметр сортировки
я не особо понимаю, что нужно добавить, ибо в задании сказано создать вектор такого типа(
там нужно создать класс, потом вектор типа класса и заполнить его. А потом уже манипуляции проводить с вектором
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
14.03.2018, 00:08 4
C++
1
2
3
4
5
6
class myClass {
   ...
   bool operator< (const myClass& val) {
      return strcmp(this->str, val.str) < 0;
   }
}
0
0 / 0 / 0
Регистрация: 19.11.2017
Сообщений: 113
14.03.2018, 00:12  [ТС] 5
Цитата Сообщение от mat_for_c Посмотреть сообщение
C++
1
2
3
4
5
6
class myClass {
   ...
   bool operator< (const myClass& val) {
      return strcmp(this->str, val.str) < 0;
   }
}
требует скобку ")" вот сюда
C++
1
  bool operator< (const myClass& val) {
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
14.03.2018, 00:18 6
Цитата Сообщение от goboloz Посмотреть сообщение
требует скобку ")" вот сюда
почему? можно код?
0
0 / 0 / 0
Регистрация: 19.11.2017
Сообщений: 113
14.03.2018, 00:20  [ТС] 7
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
#include<iostream>
#include<string> // áèáëèîòåêà äëÿ èñïîëüçîâàíèÿ ñòðîê è èõ ôóíêöèé
#include<vector> //áèáëèîòåêà äëÿ èñïîëüçîâàíèÿ âåêòîðà è åãî ôóíêöèé
#include<algorithm> //áèáëèîòåêà äëÿ äàëüíåéøåé ñîðòèðîâêè âåêòîðà
using namespace std;
 
// 1 çàäàíèå -----------------------
class myString{ //ñîçäàíèå êëàññà
public:
char str[128]; //ìàññèâ òèïà char
void count();//ôóíêöèÿ, ñ÷èòàþùàÿ äëèíó ñòðîêè
bool operator <(const myClass& val)
{
return strcmp(this->str, val.str) < 0;
}
};       //çàêûòèå êëàññà
void myString::count()//îïèñàíèå ôóíêöèè
{
cout<<"Ñòðîêà ñîñòîèò èç "<<strlen(str)<<" ñèìâîëîâ!"<<endl;
}    //ôóíêöèÿ strlen ñ÷èòàåò äëèíó ñòðîêè, óêàçàííîé â êðóãëûõ ñêîáêàõ
int main(){
system("chcp 1251");
myString m;
cout<<"Ââåäèòå ñòðîêó: ";
cin.getline(m.str, 128);//èñïîëüçóåòñÿ cin.getline äëÿ ïîëíîé "ïðî÷èòêè" ñòðîêè
m.count();             //ò.ê.cin ÷èòàåò òîëüêî äî ïåðâîãî ïðîáåëà
 
//2 çàäàíèå------------------------------
vector <myString> ve(10); //ñîçäàíèå âåêòîðà èç 10 ýëåìåíòîâ
for (int i=0; i<10; i++)  //öèêë äëÿ çàïîëíåíèÿ âåêòîðà
cin.getline(ve[i].str, 128);
for (int i=0; i<10; i++)  //âûâîä âåêòîðà íà ýêðàí
cout<<ve[i].str<<' ';
cout<<endl;
 
//3 çàäàíèå------------------------------
unsigned i;
sort (ve.begin(), ve.end()); //ñîðòèðîâêà
string previous= " "; //ïðåäûäóùåå ñëîâî
string current; //òåêóùåå ñëîâî
for (unsigned i=0; i<10; i++){
current=ve[i].str;
if (previous == current){//ñîâïàäàåò ëè ñëîâî ñ ïðåäûäóùèì
if (i<ve.size())
//{
ve.erase(ve.begin()+i);}
//}
//óäàëåíèå ýòîãî ýëåìåíòà
previous = current;
cout<<"íîâûé âåêòîð: "<<ve[i].str<<" ";
}
system("pause");
}
0
Миниатюры
Ошибка: E2093 operator '<' not implemented in type 'myString' for arguments of the same type  
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
14.03.2018, 00:34 8
вы myClass на myString замените и подключите <cstring>
0
0 / 0 / 0
Регистрация: 19.11.2017
Сообщений: 113
14.03.2018, 00:39  [ТС] 9
Цитата Сообщение от mat_for_c Посмотреть сообщение
вы myClass на myString замените и подключите <cstring>
опять вылезла ошибка(((
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
#include<iostream>
#include<cstring>
#include<string> // áèáëèîòåêà äëÿ èñïîëüçîâàíèÿ ñòðîê è èõ ôóíêöèé
#include<vector> //áèáëèîòåêà äëÿ èñïîëüçîâàíèÿ âåêòîðà è åãî ôóíêöèé
#include<algorithm> //áèáëèîòåêà äëÿ äàëüíåéøåé ñîðòèðîâêè âåêòîðà
using namespace std;
 
// 1 çàäàíèå -----------------------
class myString{ //ñîçäàíèå êëàññà
public:
char str[128]; //ìàññèâ òèïà char
void count();//ôóíêöèÿ, ñ÷èòàþùàÿ äëèíó ñòðîêè
bool operator <(const myString& val)
{
return strcmp(this->str, val.str) < 0;
}
};       //çàêûòèå êëàññà
void myString::count()//îïèñàíèå ôóíêöèè
{
cout<<"Ñòðîêà ñîñòîèò èç "<<strlen(str)<<" ñèìâîëîâ!"<<endl;
}    //ôóíêöèÿ strlen ñ÷èòàåò äëèíó ñòðîêè, óêàçàííîé â êðóãëûõ ñêîáêàõ
int main(){
system("chcp 1251");
myString m;
cout<<"Ââåäèòå ñòðîêó: ";
cin.getline(m.str, 128);//èñïîëüçóåòñÿ cin.getline äëÿ ïîëíîé "ïðî÷èòêè" ñòðîêè
m.count();             //ò.ê.cin ÷èòàåò òîëüêî äî ïåðâîãî ïðîáåëà
 
//2 çàäàíèå------------------------------
vector <myString> ve(10); //ñîçäàíèå âåêòîðà èç 10 ýëåìåíòîâ
for (int i=0; i<10; i++)  //öèêë äëÿ çàïîëíåíèÿ âåêòîðà
cin.getline(ve[i].str, 128);
for (int i=0; i<10; i++)  //âûâîä âåêòîðà íà ýêðàí
cout<<ve[i].str<<' ';
cout<<endl;
 
//3 çàäàíèå------------------------------
unsigned i;
sort (ve.begin(), ve.end()); //ñîðòèðîâêà
string previous= " "; //ïðåäûäóùåå ñëîâî
string current; //òåêóùåå ñëîâî
for (unsigned i=0; i<10; i++){
current=ve[i].str;
if (previous == current){//ñîâïàäàåò ëè ñëîâî ñ ïðåäûäóùèì
if (i<ve.size())
{
ve.erase(ve.begin()+i);
}
//óäàëåíèå ýòîãî ýëåìåíòà
previous = current;
cout<<"íîâûé âåêòîð: "<<ve[i].str<<" ";
}}
system("pause");
}
0
Миниатюры
Ошибка: E2093 operator '<' not implemented in type 'myString' for arguments of the same type  
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
14.03.2018, 00:48 10
у меня в visual studio все компилит...
0
0 / 0 / 0
Регистрация: 19.11.2017
Сообщений: 113
14.03.2018, 00:49  [ТС] 11
Цитата Сообщение от mat_for_c Посмотреть сообщение
у меня в visual studio все компилит...
у меня поганый билдер....
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
14.03.2018, 00:51 12
попробуйте заменить на такой вариант:
C++
1
2
3
friend bool operator<(const myString& l, myString& r) {
   return strcmp(l.str, r.str) < 0;
}
0
0 / 0 / 0
Регистрация: 19.11.2017
Сообщений: 113
14.03.2018, 00:53  [ТС] 13
Цитата Сообщение от mat_for_c Посмотреть сообщение
попробуйте заменить на такой вариант:
C++
1
2
3
friend bool operator<(const myString& l, myString& r) {
   return strcmp(l.str, r.str) < 0;
}
такую же ошибку выдаёт..(
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
14.03.2018, 00:56 14
а так:
C++
1
2
3
4
5
6
7
8
class myString {
   ...
   friend bool operator<(const myString& l, myString& r);
}
 
bool operator<(const myString& l, myString& r) {
   return strcmp(l.str, r.str) < 0;
}
0
0 / 0 / 0
Регистрация: 19.11.2017
Сообщений: 113
14.03.2018, 01:07  [ТС] 15
если я правильно поняла, то
bool operator<(const myString& l, myString& r) {
return strcmp(l.str, r.str) < 0;
} пишется после класса
если это так, то снова не работает
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
#include<iostream>
#include<cstring>
#include<string> // библиотека для использования строк и их функций
#include<vector> //библиотека для использования вектора и его функций
#include<algorithm> //библиотека для дальнейшей сортировки вектора
using namespace std;
 
// 1 задание -----------------------
class myString{ //создание класса
public:
char str[128]; //массив типа char
void count();//функция, считающая длину строки
friend bool operator<(const myString& l, myString& r);
};       //закытие класса
bool operator<(const myString& l, myString& r) {
   return strcmp(l.str, r.str) < 0;
}
void myString::count()//описание функции
{
cout<<"Строка состоит из "<<strlen(str)<<" символов!"<<endl;
}    //функция strlen считает длину строки, указанной в круглых скобках
int main(){
system("chcp 1251");
myString m;
cout<<"Введите строку: ";
cin.getline(m.str, 128);//используется cin.getline для полной "прочитки" строки
m.count();             //т.к.cin читает только до первого пробела
 
//2 задание------------------------------
vector <myString> ve(10); //создание вектора из 10 элементов
for (int i=0; i<10; i++)  //цикл для заполнения вектора
cin.getline(ve[i].str, 128);
for (int i=0; i<10; i++)  //вывод вектора на экран
cout<<ve[i].str<<' ';
cout<<endl;
 
//3 задание------------------------------
unsigned i;
sort (ve.begin(), ve.end()); //сортировка
string previous= " "; //предыдущее слово
string current; //текущее слово
for (unsigned i=0; i<10; i++){
current=ve[i].str;
if (previous == current){//совпадает ли слово с предыдущим
if (i<ve.size())
{
ve.erase(ve.begin()+i);
}
//удаление этого элемента
previous = current;
cout<<"новый вектор: "<<ve[i].str<<" ";
}}
system("pause");
}
Добавлено через 7 минут
Цитата Сообщение от mat_for_c Посмотреть сообщение
а так:
C++
1
2
3
4
5
6
7
8
class myString {
   ...
   friend bool operator<(const myString& l, myString& r);
}
 
bool operator<(const myString& l, myString& r) {
   return strcmp(l.str, r.str) < 0;
}
и в другое место втыкала - никакого результата
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
14.03.2018, 01:08 16
а если const во 2-й параметр добавить? в объявлении и определении оператора
0
0 / 0 / 0
Регистрация: 19.11.2017
Сообщений: 113
14.03.2018, 01:14  [ТС] 17
Цитата Сообщение от mat_for_c Посмотреть сообщение
а если const во 2-й параметр добавить? в объявлении и определении оператора
если мой сломанный мозг понял, это так, то ничего не получается
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
#include<iostream>
#include<cstring>
#include<string> // áèáëèîòåêà äëÿ èñïîëüçîâàíèÿ ñòðîê è èõ ôóíêöèé
#include<vector> //áèáëèîòåêà äëÿ èñïîëüçîâàíèÿ âåêòîðà è åãî ôóíêöèé
#include<algorithm> //áèáëèîòåêà äëÿ äàëüíåéøåé ñîðòèðîâêè âåêòîðà
using namespace std;
 
// 1 çàäàíèå -----------------------
class myString{ //ñîçäàíèå êëàññà
public:
char str[128]; //ìàññèâ òèïà char
void count();//ôóíêöèÿ, ñ÷èòàþùàÿ äëèíó ñòðîêè
friend bool operator<(myString& l, const myString& r);
 
};       //çàêûòèå êëàññà
bool operator<( myString& l, const myString& r) {
   return strcmp(l.str, r.str) < 0;
}
 
void myString::count()//îïèñàíèå ôóíêöèè
{
cout<<"Ñòðîêà ñîñòîèò èç "<<strlen(str)<<" ñèìâîëîâ!"<<endl;
}    //ôóíêöèÿ strlen ñ÷èòàåò äëèíó ñòðîêè, óêàçàííîé â êðóãëûõ ñêîáêàõ
int main(){
system("chcp 1251");
myString m;
cout<<"Ââåäèòå ñòðîêó: ";
cin.getline(m.str, 128);//èñïîëüçóåòñÿ cin.getline äëÿ ïîëíîé "ïðî÷èòêè" ñòðîêè
m.count();             //ò.ê.cin ÷èòàåò òîëüêî äî ïåðâîãî ïðîáåëà
 
//2 çàäàíèå------------------------------
vector <myString> ve(10); //ñîçäàíèå âåêòîðà èç 10 ýëåìåíòîâ
for (int i=0; i<10; i++)  //öèêë äëÿ çàïîëíåíèÿ âåêòîðà
cin.getline(ve[i].str, 128);
for (int i=0; i<10; i++)  //âûâîä âåêòîðà íà ýêðàí
cout<<ve[i].str<<' ';
cout<<endl;
 
//3 çàäàíèå------------------------------
unsigned i;
sort (ve.begin(), ve.end()); //ñîðòèðîâêà
string previous= " "; //ïðåäûäóùåå ñëîâî
string current; //òåêóùåå ñëîâî
for (unsigned i=0; i<10; i++){
current=ve[i].str;
if (previous == current){//ñîâïàäàåò ëè ñëîâî ñ ïðåäûäóùèì
if (i<ve.size())
{
ve.erase(ve.begin()+i);
}
//óäàëåíèå ýòîãî ýëåìåíòà
previous = current;
cout<<"íîâûé âåêòîð: "<<ve[i].str<<" ";
}}
system("pause");
}
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
14.03.2018, 01:16 18
Цитата Сообщение от goboloz Посмотреть сообщение
если мой сломанный мозг понял, это так
добавить, это не значить убрать из 1го параметра. сделайте чтобы там и там const было. хотя мне кажется не поможет.
1
0 / 0 / 0
Регистрация: 19.11.2017
Сообщений: 113
14.03.2018, 01:19  [ТС] 19
Цитата Сообщение от mat_for_c Посмотреть сообщение
добавить, это не значить убрать из 1го параметра. сделайте чтобы там и там const было. хотя мне кажется не поможет.
оно заработало, но видно я неправильно внизу что-то написала, ибо не удаляет ничего
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
14.03.2018, 01:21 20
Цитата Сообщение от goboloz Посмотреть сообщение
оно заработало
ура. я уж хотел смириться с тем, что меня победил билдер какой-то
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.03.2018, 01:21

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Ошибка: 'operator<<' not implemented in type 'istream' for arguments of type 'int'
Создаем самую простую прогу: int sgrt(int); #pragma argsused int main(int argc, char* argv) { ...

E2094 'operator>>' not implemented in type 'ostream' for arguments of type 'int'
Начал осваивать C++ по Дейтелу &quot;как программировать на с++&quot;. Пользуюсь Borland C++ Builder 6....

Ошибка в функции int is applied to too many type arguments
Перемножает каждый элемент списка на указанный элемент: mul' :: Int a =&gt; -&gt; Int -&gt; mul' b = ...

Ошибка Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another
Private Sub fStatistic(ThisPage As string) Dim CNN as OleDb.OleDbConnection Dim sCNN as...


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

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

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