Форум программистов, компьютерный форум CyberForum.ru

set_intersection ??? не понятная ошибка. - C++

Восстановить пароль Регистрация
 
princessaiko
 Аватар для princessaiko
1 / 1 / 0
Регистрация: 17.12.2010
Сообщений: 37
25.04.2012, 15:24     set_intersection ??? не понятная ошибка. #1
есть базовый класс car, производный Bus. Так же есть класс который не связан с Bus и car, он называется Park. Park является frind class для car. Проблема:
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
// Автопарк
#define max_nbuses 100
class Park { 
                string name;//название парка
                int dohod;// ежегодный доход
                int nbus;
      public:   
                vector <Bus> Buss;
                vector <Bus>::iterator pBuss;
// тут еще всякие функции
                Park multiply(Park &A, Park &B);
            };
// pryamaya sortivovka ot A do ya    
bool comparefun( Bus A, Bus B)  
 {return strcoll(A.getname(), B.getname())<0;}
 
 //multiply
Park Park::multiply(Park &A,Park &B)
{
     Park C; 
    // vector<Bus> :: iterator result;
     //result = inserter( C.Buss, C.Buss.begin());
    // sort(A.Buss.begin(), .Buss.end(), comparefun);  
     //sort(B.Buss.begin(), B.Buss.end(), comparefun);
   set_intersection(  A.Buss.begin(), A.Buss.end(), 
                        B.Buss.begin(), B.Buss.end(),
                        inserter( C.Buss, C.Buss.begin() )   
                      );
     return C;
};

Не работает set_intersection.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2012, 15:24     set_intersection ??? не понятная ошибка.
Посмотрите здесь:

C++ Не понятная ошибка файлы и строки
set_intersection C++
Не понятная ошибка при чтении из файла C++
не понятная ошибка ввода значений C++
C++ Не понятная ошибка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
25.04.2012, 15:25     set_intersection ??? не понятная ошибка. #2
princessaiko, Ошибка-то какая? set_intersection может использоваться только с отсортированными последовательностями
princessaiko
 Аватар для princessaiko
1 / 1 / 0
Регистрация: 17.12.2010
Сообщений: 37
25.04.2012, 16:09  [ТС]     set_intersection ??? не понятная ошибка. #3
то есть нужен sort??? сначала?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
25.04.2012, 16:27     set_intersection ??? не понятная ошибка. #4
princessaiko, Ну как бэ да.
princessaiko
 Аватар для princessaiko
1 / 1 / 0
Регистрация: 17.12.2010
Сообщений: 37
25.04.2012, 16:32  [ТС]     set_intersection ??? не понятная ошибка. #5
Вот:
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
// Автопарк
#define max_nbuses 100
class Park { 
string name;//название парка
int dohod;// ежегодный доход
int nbus;
public: 
vector <Bus> Buss;
vector <Bus>::iterator pBuss;
// тут еще всякие функции
Park multiply(Park &A, Park &B);
};
// pryamaya sortivovka ot A do ya 
bool comparefun( Bus A, Bus B) 
{return strcoll(A.getname(), B.getname())<0;}
 
//multiply
Park Park::multiply(Park &A,Park &B)
{
Park C; 
sort(A.Buss.begin(), A.Buss.end(), comparefun);
sort(B.Buss.begin(), B.Buss.end(), comparefun); 
set_intersection( A.Buss.begin(), A.Buss.end(), 
B.Buss.begin(), B.Buss.end(),
inserter( C.Buss, C.Buss.begin() ) 
);
return C;
};
Все равно не работает
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
25.04.2012, 16:36     set_intersection ??? не понятная ошибка. #6
princessaiko, так сложно ошибку написать?
princessaiko
 Аватар для princessaiko
1 / 1 / 0
Регистрация: 17.12.2010
Сообщений: 37
25.04.2012, 16:40  [ТС]     set_intersection ??? не понятная ошибка. #7
Êîìïèëÿòîð: Default compiler
Âûïîëíåíèå g++.exe...
g++.exe "C:\Dev-Cpp\123\êóðñàâîé\ðãð2\2\lib.cpp" -o "C:\Dev-Cpp\123\êóðñàâîé\ðãð2\2\lib.exe" -I"C:\Dev-Cpp\lib\gcc\mingw32\3.4.2\include" -I"C:\Dev-Cpp\include\c++\3.4.2\backward" -I"C:\Dev-Cpp\include\c++\3.4.2\mingw32" -I"C:\Dev-Cpp\include\c++\3.4.2" -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib"
C:\Dev-Cpp\123\êóðñàâîé\ðãð2\2\lib.cpp: In member function `Park Park::multipl(Park&, Park&)':

C:\Dev-Cpp\123\êóðñàâîé\ðãð2\2\lib.cpp:134: error: 'class std::vector<Bus, std::allocator<Bus> >' has no member named 'Begin'
C:\Dev-Cpp\123\êóðñàâîé\ðãð2\2\lib.cpp:137: error: expected primary-expression before ')' token

C:\Dev-Cpp\123\êóðñàâîé\ðãð2\2\lib.cpp:137: error: expected `;' before ')' token

C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h: In function `_OutputIterator std::set_intersection(_InputIterator1, _InputIterator1, _InputIterator2, _InputIterator2, _OutputIterator) [with _InputIterator1 = __gnu_cxx::__normal_iterator<Bus*, std::vector<Bus, std::allocator<Bus> > >, _InputIterator2 = __gnu_cxx::__normal_iterator<Bus*, std::vector<Bus, std::allocator<Bus> > >, _OutputIterator = std::insert_iterator<std::vector<Bus, std::allocator<Bus> > >]':
C:\Dev-Cpp\123\êóðñàâîé\ðãð2\2\lib.cpp:159: instantiated from here
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:4212: error: no match for 'operator<' in '(&__first1)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Bus*, _Container = std::vector<Bus, std::allocator<Bus> >]() < (&__first2)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Bus*, _Container = std::vector<Bus, std::allocator<Bus> >]()'
C:\Dev-Cpp\123\êóðñàâîé\ðãð2\2\lib.cpp:159: instantiated from here
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:4214: error: no match for 'operator<' in '(&__first2)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Bus*, _Container = std::vector<Bus, std::allocator<Bus> >]() < (&__first1)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Bus*, _Container = std::vector<Bus, std::allocator<Bus> >]()'

Âûïîëíåíèå çàâåðøåíî

Простите, на dev пишу
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
25.04.2012, 16:45     set_intersection ??? не понятная ошибка. #8
princessaiko, А читать ошибки?

C:\Dev-Cpp\123\êóðñàâîé\ðãð2\2\lib.cpp:134: error: 'class std::vector<Bus, std::allocator<Bus> >' has no member named 'Begin'
не Begin а begin.

C:\Dev-Cpp\123\êóðñàâîé\ðãð2\2\lib.cpp:137: error: expected primary-expression before ')' token

C:\Dev-Cpp\123\êóðñàâîé\ðãð2\2\lib.cpp:137: error: expected `;' before ')' token
Не могу сказать. Не вижу кода.
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:4212: error: no match for 'operator<' in '(&__first1)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Bus*, _Container = std::vector<Bus, std::allocator<Bus> >]() < (&__first2)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Bus*, _Container = std::vector<Bus, std::allocator<Bus> >]()'
Для типа не определен оператор <.
http://cplusplus.com/reference/algor..._intersection/
Как видно последним параметром можно передать функцию сравнения.
princessaiko
 Аватар для princessaiko
1 / 1 / 0
Регистрация: 17.12.2010
Сообщений: 37
25.04.2012, 16:52  [ТС]     set_intersection ??? не понятная ошибка. #9
не подскажите, я поняла так что у set_intersection у меня должно быть 6 аргументов, а меня 5. Шестой это своя функция, как мне ее вообще сделать? Пример приведите свой. Кто знает. Задача такая, так как у меня 1 класс базовый, 2 ой производный и третий просто friend к первому классу. Нужно чтобы пересечение происходило по имени(string). как вот эту переменную типа string закинуть в функцию, которая должна быть шестой?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
25.04.2012, 17:09     set_intersection ??? не понятная ошибка. #10
Да к примеру та же функция сравнения, что используется и для сортировки.
princessaiko
 Аватар для princessaiko
1 / 1 / 0
Регистрация: 17.12.2010
Сообщений: 37
25.04.2012, 17:12  [ТС]     set_intersection ??? не понятная ошибка. #11
как сделать чтобы при вызове в main она показывала, что вот мол такие-то объекты остались и сами объекты?
Если я воспользуюсь comparefun то там ошибки только будут
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
25.04.2012, 17:36     set_intersection ??? не понятная ошибка. #12
Пример...

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
#include <iostream>
#include <string>
#include <vector>
#include <functional>
#include <algorithm>
 
class Cl
{
public:
   explicit Cl(const std::string& s):str(s)
   {
   }
   const std::string get_string() const { return str; }
private:
   std::string str;
};
 
struct compare_cl_by_string : public std::binary_function<Cl, Cl, bool>
{
public:
   result_type operator () (const first_argument_type& lhs, const second_argument_type& rhs)
   {
      return lhs.get_string() < rhs.get_string();
   }
};
 
int main()
{
   std::vector<Cl> vec = 
   {
      Cl("abc"),
      Cl("bca"),
      Cl("bbb")
   };
   std::vector<Cl> vec2 = 
   {
      Cl("abd"),
      Cl("bbb"),
      Cl("abc")
   };
   std::vector<Cl> result;
   std::sort(vec.begin(), vec.end(), compare_cl_by_string());
   std::sort(vec2.begin(), vec2.end(), compare_cl_by_string());
   std::set_intersection(vec.begin(), vec.end(), vec2.begin(), vec2.end(),
   std::back_inserter(result), compare_cl_by_string());
   std::for_each(result.begin(), result.end(), [] (const Cl& s) 
   { std::cout << s.get_string() << std::endl; });
}
http://liveworkspace.org/code/57ebe8...add88610d73fa3
princessaiko
 Аватар для princessaiko
1 / 1 / 0
Регистрация: 17.12.2010
Сообщений: 37
25.04.2012, 17:45  [ТС]     set_intersection ??? не понятная ошибка. #13
это не то, ладно спасибо
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
25.04.2012, 17:48     set_intersection ??? не понятная ошибка. #14
princessaiko, Ну расскажите мне отличия по сути использования set_intersection у меня и у вас...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2012, 18:00     set_intersection ??? не понятная ошибка.
Еще ссылки по теме:

C++ Не понятная ошибка
Не понятная ошибка C++
Не понятная ошибка C++

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

Или воспользуйтесь поиском по форуму:
princessaiko
 Аватар для princessaiko
1 / 1 / 0
Регистрация: 17.12.2010
Сообщений: 37
25.04.2012, 18:00  [ТС]     set_intersection ??? не понятная ошибка. #15
Вот начало:
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
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <algorithm>
#include <set>
#include <iterator>
#include <numeric>
#define lname 40
 
 
// Àâòîìîáèëü
using namespace std;
char buf_str[lname];
class car{
      static int count;
      int nomer_car;// Г*îìåð Г*âòîìîáèëÿ
      char  name[32];//Г¬Г*ðêГ* Г*âòîìîáèëÿ
      friend class Park;
  public: 
          car();
          ~car();
          void setname (const char*); 
               char* getname();
          void setnomer_car(int);
               int getnomer_car();
          void read();
          void show();
            };
int car::count = 0;
 
car::car(){count++;} 
car::~car(){count--;};
            
void car :: setname(const char*r)
{
     cout<<strlen(r); if (strlen(r) <= lname) {strcpy(name,r);}
else {cout<<"Publication::set_name: too long name";}
};
char *car :: getname(){return &name[0];}
void car :: setnomer_car( int nomer_car1){nomer_car=nomer_car1;}
int car :: getnomer_car(){return nomer_car;}
 
void car::read()
{
cout<<"Vvedite firmu avtobusa: "; cin.getline(name, lname);
cout<<"Vvedite nomer avtobusa: "; cin.getline(buf_str, lname); nomer_car=atoi(buf_str);
};
 
void car::show(){
cout<<"Firma avtobusa:  "<<name<<";"<<" Nomer avtobusa: "<<nomer_car<<";"<<endl;
     };
           
// Àâòîáóñ
class Bus : public car{
                static int c; 
                char man[lname];// ÔÈÎ ГђГ*áîòГ*ГЁГЄГ*
                int passanger;// êîëè÷åñòâî ГЇГ*Г±Г±Г*æèðîâ
               // friend class Park;
      public: 
              Bus();
              ~Bus();
                void setman (const char*);
                     char* getman();
                void setpassanger(int);
                     int getpassanger();
                void read();
                void show();
            };
int Bus::c = 0;
Bus::Bus(){c++;};
Bus::~Bus(){c--;};            
void Bus :: setman(const char*r){if (strlen(r)<=lname)strcpy(man,r);}
char* Bus :: getman(){return &man[0];}
void Bus :: setpassanger( int passanger1){passanger=passanger1;}
int Bus :: getpassanger(){return passanger;}
 
void Bus::read()
{
car::read();
cout<<"Vvedite Rabotnika: "; cin.getline(man,lname); 
cout<<"Vvedite kolichestvo passajirov: "; cin.getline(buf_str, lname); passanger=atoi(buf_str); 
};
 
void Bus::show(){
car::show();
cout<<"Rabotnik:  "<<man<<";"<<" Kolichestvo passajirov: "<<passanger<<";"<<endl;
cout<<"______________________________________________________"<<endl;
     };
Добавлено через 41 секунду
ну плюс то что в ЛС отправлено
Yandex
Объявления
25.04.2012, 18:00     set_intersection ??? не понятная ошибка.
Ответ Создать тему
Опции темы

Текущее время: 05:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru