Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
barfly
0 / 0 / 0
Регистрация: 10.03.2011
Сообщений: 14
#1

Как определить оператор в С++? - C++

21.06.2011, 14:06. Просмотров 573. Ответов 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
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
#include <iostream>
 
enum { maxlen = 100, 
       maxn = 100 };
 
struct value {
  char name[maxlen];
};
 
struct key {
  int k;
  value *v;
};
 
int increment(long inc[], long maxn) {
  int p1, p2, p3, s;
  p1 = p2 = p3 = 1;
  s = -1;
  do {
    if (++s % 2) 
      inc[s] = 8*p1 - 6*p2 + 1;
    else {
      inc[s] = 9*p1 - 9*p3 + 1;
      p2 *= 2;
      p3 *= 2;
    }
    p1 *= 2;
  } while(3*inc[s] < maxn);  
  return s > 0 ? --s : 0;
}
 
template<class T>
void shellsort(T a[], long maxn) {
  long inc, i, j, seq[40];
  int s;
  s = increment(seq, maxn);
  while (s >= 0) {
    inc = seq[s--];
    for (i = inc; i < maxn; i++) {
      T temp = a[i];
      for (j = i-inc; (j >= 0) && (a[j] > temp); j -= inc)
        a[j+inc] = a[j];
      a[j+inc] = temp;
    }
  }
}
 
int main() {
  using namespace std;
 
  key k[maxn];
  value v[maxn];
  long n;
  cin >> n;
  for (long i = 0; i != n; ++i)
    k[i].v = v + i;
  for (long i = 0; i != n; ++i) {
    cin >> k[i].k;
    cin.getline(k[i].v->name, maxlen);
  }
  
  shellsort(k, n);
  
  for (long i = 0; i != n; ++i) {
    cout << k[i].k << " " << k[i].v->name << '\n';
  }
}
при компиляции вылезает ошибка:
Bash
1
2
3
4
g++ -std=c++98 -pedantic -Wall tmp.cpp
tmp.cpp: In function ‘void shellsort(T*, long int) [with T = key]’:
tmp.cpp:62:17:   instantiated from here
tmp.cpp:41:21: error: no match for ‘operator>in*(a + ((long unsigned int)(((long unsigned int)j) * 16ul))) > temp’
Я так понимаю надо определить оператор >, то есть написать перед вызовом shellsort что-то типа:
C++
1
2
3
 inline bool operator> (const key& k1.k, const key& k2.k) {
    return k1.k < k2.k;
  }
тогда добавляется еще ошибка:
Bash
1
2
3
4
5
6
tmp.cpp: In function ‘int main()’:
tmp.cpp:62:39: error: expected ‘,’ or ‘...’ before ‘.’ token
tmp.cpp:62:60: error: a function-definition is not allowed here before ‘{’ token
tmp.cpp: In function ‘void shellsort(T*, long int) [with T = key]’:
tmp.cpp:65:17:   instantiated from here
tmp.cpp:41:21: error: no match for ‘operator>in*(a + ((long unsigned int)(((long unsigned int)j) * 16ul))) > temp’
Подскажите как решить проблему, а то я C++ только начал изучать.
Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2011, 14:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как определить оператор в С++? (C++):

Как определить оператор += для сложения классов? - C++
Как определить оператор += для сложения классов? class point { public: float x; float y; float z; ...

Определить унарный оператор ++ как дружественную функцию - C++
Есть программа: #include &quot;stdafx.h&quot; #include&lt;iostream&gt; #include&lt;conio.h&gt; using namespace std; class Coord ...

Перегрузка операций (Создать класс вещественных чисел (double); определить оператор +, как функцию-элемент и – как дружественную функцию) - C++
помогите решить пожалуйста Задание 2. Бинарная операция Создать класс вещественных чисел (double).. Определить оператор +, как...

Как перегрузить оператор<< и оператор>> ? - C++
Доброго времени суток. Застрял на двух вопросах и не как не могу найти инфу которвя мне помогла бы их решить. вопрос первый. В общем...

Оператор break как оператор go to next - C++
Подскажите, в этом примере break эквивалентна действию оператора go to next?

Оператор if: определить, является ли I делителем J и K - C++
Даны три целых положительных числа I, J, K. Определить является ли I делителем J и K.

5
asics
Freelance
Эксперт С++
2850 / 1785 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
21.06.2011, 14:12 #2
В структуре допиши следующие:
C++
1
2
3
friend bool operator> (const key& k1, const key& k2) {
  return k1.k < k2.k;
}
по-крайней мере будет компилироваться.
1
Dejust
49 / 49 / 1
Регистрация: 31.01.2011
Сообщений: 156
21.06.2011, 14:13 #3
Как-то так
C++
1
2
3
4
5
6
7
8
struct key
{
/* ... */
    bool operator > (const key& k1, const key& k2)
    {
         return (k1.k > k2.k) ? true : false;
    }
};
1
asics
Freelance
Эксперт С++
2850 / 1785 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
21.06.2011, 14:14 #4
Dejust, Не, тогда уже так:
C++
1
2
3
4
5
6
7
8
struct key
{
/* ... */
    bool operator > (const key& k2)
    {
         return (k > k2.k) ? true : false
    }
};
0
Dejust
49 / 49 / 1
Регистрация: 31.01.2011
Сообщений: 156
21.06.2011, 14:16 #5
asics, действительно Чет забылся..
0
barfly
0 / 0 / 0
Регистрация: 10.03.2011
Сообщений: 14
21.06.2011, 14:18  [ТС] #6
Всем спасибо. Заработало.
0
21.06.2011, 14:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2011, 14:18
Привет! Вот еще темы с ответами:

Оператор условия. Определить, пересекаются ли заданные кривая и прямая - C++
Определить пересекаются ли кривая y=ax³+bx²+cx+d и прямая y=fx+g. При положительном ответе найти точку пересечения. Что не...

Определить тип треугольника используя исключительно оператор switch - C++
Здравствуйте, получил такую задачу. Дан треугольник, данные его стороны, определить его тип используя ИСКЛЮЧИТЕЛЬНО оператор switch. В...

Оператор while: определить порядковый номер первого введенного положительного числа - C++
помогите,пожалуйста,написать программу с while для задачи: определить порядковый номер первого введенного положительного числа

Используя оператор while определить сумму всех нечетных чисел в диапазоне от 1 до 99 - C++
Оператор while


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

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

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