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

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

Восстановить пароль Регистрация
 
barfly
0 / 0 / 0
Регистрация: 10.03.2011
Сообщений: 14
21.06.2011, 14:06     Как определить оператор в С++? #1
Программа для сортировки шелла массива данных по ключу.
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++ только начал изучать.
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2011, 14:06     Как определить оператор в С++?
Посмотрите здесь:

C++ Оператор break как оператор go to next
Перегрузка операций (Создать класс вещественных чисел (double); определить оператор +, как функцию-элемент и – как дружественную функцию) C++
Условный оператор (определить есть ли во втором символе строки символ "-") C++
Оператор выбора: определить, буквой, цифрой или спецсимволом является введенный символ C++
C++ Оператор while: определить порядковый номер первого введенного положительного числа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
21.06.2011, 14:12     Как определить оператор в С++? #2
В структуре допиши следующие:
C++
1
2
3
friend bool operator> (const key& k1, const key& k2) {
  return k1.k < k2.k;
}
по-крайней мере будет компилироваться.
Dejust
 Аватар для 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;
    }
};
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
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
    }
};
Dejust
 Аватар для Dejust
49 / 49 / 1
Регистрация: 31.01.2011
Сообщений: 156
21.06.2011, 14:16     Как определить оператор в С++? #5
asics, действительно Чет забылся..
barfly
0 / 0 / 0
Регистрация: 10.03.2011
Сообщений: 14
21.06.2011, 14:18  [ТС]     Как определить оператор в С++? #6
Всем спасибо. Заработало.
Yandex
Объявления
21.06.2011, 14:18     Как определить оператор в С++?
Ответ Создать тему
Опции темы

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