0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 6
1

Выражение должно иметь тип класса в Visual Studio

09.01.2015, 11:21. Показов 3388. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Около года назад прорешивали с братом возможные задания на экзамен (он учился на курс старше меня), а мне сейчас выпала решенная нами задачка про быструю сортировку массива точек, где одна точка считается больше другой, если она лежит правее, или, если координаты совпадают, выше.
Дело в том, что брат писал код и объяснял что к чему мне через скайп, все прекрасно работало и сортировалось, но он работал в С++ билдере, а мне нужно показывать работу в Visual Studio, а в ней выпадает следующая ошибка: не выходит вывести на экран отсортированные точки, в списке ошибок поясняется, что выражение должно иметь тип класса. Что нужно добавить или изменить?

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
POINT massiv[] =
 {
    {11, 6}, {6, 2}, {12, 8}, {15, 9},
    {4, 10}, {11, 9}, {8, 9}, {10, 10},
    {11, 9}, {9, 10}, {9, 11}, {6, 15},
    {14, 12}, {4, 11}, {11, 6}, {11, 15}
 };
 
int sravX(const void *t1, const void *t2)
{
    return ((POINT *)t1)->x-((POINT *)t2)->x;
}
 
int sravY(const void *t1, const void *t2)
{
    return ((POINT *)t1)->y-((POINT *)t2)->y;
}
 
void sorting(POINT *massiv, int width, int height)
{
    int k=width*height;
 
    qsort(massiv, k, sizeof(POINT), &sravX);
        for (int i=0; i<k; i=i+height)
    qsort(&massiv, height, sizeof(POINT), &sravY);
    for (int i=0; i<k; i++)
        cprintf("%d %d\r\n", massiv.x, massiv.y);//ошибка: выражение слева от .x и .y должно представлять ///класс, структуру или объединение
    getch();
}
 
int main(void)
{
    sorting(massiv, 4, 4);
    return 0;
}
Брат сейчас в армии, у него спросить, в чем проблема, не могу, прошу помочь знающих людей
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.01.2015, 11:21
Ответы с готовыми решениями:

Выражение должно иметь тип класса
Вот код мне нужно проверить пустое поле textBox1. if (textBox1-&gt;Text.Empty) { Form2 ^ F2;...

Выражение должно иметь тип класса. Да ну?
перекопал весь форум, ни где не нашел решение моей проблемы. #include &lt;GL/glut.h&gt; #include...

Выражение должно иметь тип класса
Есть класс матрица, содержащий следующие поля: int rows, cols;//количество строк и столбцов...

Выражение должно иметь тип класса, как исправить?
Ошибку выдает в строчке кода bool kill (Rplane x, Uplane y){ if(x.set &lt; y.set) return...

7
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
09.01.2015, 11:34 2
C++
1
cprintf("%d %d\r\n", massiv[i].x, massiv[i].y);
Добавлено через 39 секунд
tie_rs, Тэги кодов не забывай.
1
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 6
09.01.2015, 12:20  [ТС] 3
Спасибо, помогло, компиляция пошла, однако теперь выпадает необработанное исключение: нарушение прав доступа. Почему-то в i вместо максимального 16 лежит 2715648...
0
Модератор
Эксперт С++
13503 / 10755 / 6409
Регистрация: 18.12.2011
Сообщений: 28,706
09.01.2015, 12:45 4
Возможно,Вы хотели написать
C++
1
2
  for (int i=0; i<k; i=i+height)
        qsort(massiv+i, height, sizeof(POINT), &sravY);
Однако, это решит задачу сортировки по 2 параметру
только, если есть по 4 одинаковых значений первого параметра.
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
09.01.2015, 13:49 5
Цитата Сообщение от tie_rs Посмотреть сообщение
однако
Подробно разбираться в твоей логике не стал, похоже, что сам назначаешь такое i. Но у меня другой вопрос. Зачем тебе делать 2 сортировки? Все можно отсортировать за один проход, одной сортировочной функцией.
0
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 6
09.01.2015, 14:15  [ТС] 6
Ну я уже плохо помню, как мне брат это дело объяснял, я тогда еще даже программирование не начал изучать, но то, что у него в С++ билдере все правильно сортировалось, это точно.
Цитата Сообщение от Байт Посмотреть сообщение
можно отсортировать за один проход, одной сортировочной функцией.
__________________
Не могли бы Вы, если вас не затруднит, конечно, вашу идею реализовать в виде кода или алгоритма?
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
09.01.2015, 16:05 7
Лучший ответ Сообщение было отмечено tie_rs как решение

Решение

Цитата Сообщение от tie_rs Посмотреть сообщение
Не могли бы Вы,
C++
1
2
3
4
5
6
7
8
9
int srav(const void *t1, const void *t2)
{
    if (((POINT *)t1)->x-((POINT *)t2)->x)
      return ((POINT *)t1)->x-((POINT *)t2)->x;
    else
      return ((POINT *)t1)->y-((POINT *)t2)->y;
}
..... 
qsort(massiv, k, sizeof(POINT), &srav);
1
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 6
09.01.2015, 17:48  [ТС] 8
Огромное спасибо за помощь, все заработало!
0
09.01.2015, 17:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2015, 17:48
Помогаю со студенческими работами здесь

Работа с текстами/строки. Error: выражение должно иметь тип класса
Есть код #include &quot;stdio.h&quot; #include &quot;stdafx.h&quot; #include &quot;stdlib.h&quot; #include &lt;string.h&gt;...

Найти причины ошибки "This - выражение должно иметь тип класса"
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class X {...

Выражение должно иметь тип указателя
что тут не так IClientEntity *player=...

Выражение должно иметь тип указателя
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; struct laiks...


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

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

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