Ошибка "cannot convert 'struct1 *' to 'struct1 *' (передача указателя на массив структур в функцию) - C (СИ)
Формулировка задачи:
Добрый вечер!
Уважаемые специалисты, помогите, пожалуйста, исправить ошибку.
Код следующий:
Борланд ругается на строку № 28
Сообщение об ошибке: "cannot convert ' stud *' to ' stud *'
Все что нашла об этой ошибке:
т.е. переменной типа struct stud* присваивается значение типа struct stud*, но они же вроде одинаковые...
Не судите строго, я только учусь...
#include "stdio.h"
#include "conio.h"
#define sz 4
#define szsn 200
#define szfn 100
#define szpn 100
#define f 15
struct fulln {char sn[szsn]; char fir[szfn]; char pn[szpn]; };
struct date {int num; int mon; int year; };
struct stud {struct fulln fio; struct date ent; struct date exc; };
void printstr(struct stud *p, int n, int x, int y);
void main()
{
clrscr();
struct stud list[sz]=
{ {{"Petrov", "Petr", "Ivanovich"}, {25,12,1980}, {0,0,0}},
{{"Sidorov", "Ivan", "Nikolaevich"}, {1,1,2000}, {12,1,2001}},
{{"Chukhyrmukhyrr", "Georgiy", "Alexandrovich"}, {1,9,2010}, {1,7,2014}} };
struct stud *C;
C=&list[0];
printstr(C, 3, 2, 17);
getch();
}
void printstr(struct stud *p, int n, int x, int y)
{
int i, j;
for(i=0; i<n; i++)
{
gotoxy(x,y+i);
cprintf("%s", (p+i)->fio.sn);
gotoxy(x+f+1,y+i);
cprintf("%s", (p+i)->fio.fir);
gotoxy(x+f*2+1,y+i);
cprintf("%s", (p+i)->fio.pn);
}
}printstr(C, 3, 2, 17);
Cannot convert тип_1 to тип_2
Сообщение об ошибке этапа компиляции (невозможно преобразовать тип_1 в тип_2)
Присваивание, инициализация или выражение требует выполнение заданного преобразования типа, но данное преобразование недопустимо.
Решение задачи: «Ошибка "cannot convert 'struct1 *' to 'struct1 *' (передача указателя на массив структур в функцию)»
textual
Листинг программы
#include "stdio.h"
#include "conio.h"
#define sz 4
#define szsn 200
#define szfn 100
#define szpn 100
#define f 15
struct fulln {char sn[szsn]; char fir[szfn]; char pn[szpn]; };
struct date {int num; int mon; int year; };
struct stud {struct fulln fio; struct date ent; struct date exc; };
void printstr(struct stud *p, int n, int x, int y);
void main()
{
clrscr();
struct stud list[sz]=
{
{{"Petrov", "Petr", "Ivanovich"}, {25,12,1980}, {0,0,0}},
{{"Sidorov", "Ivan", "Nikolaevich"}, {1,1,2000}, {12,1,2001}},
{{"Chukhyrmukhyrr", "Georgiy", "Alexandrovich"}, {1,9,2010}, {1,7,2014}}
};
struct stud *C;
C=&list[0];
printstr(C, 3, 2, 17);
getch();
}
void printstr(struct stud *p, int n, int x, int y)
{
int i, j;
for(i=0; i<n; i++)
{
gotoxy(x,y+i);
cprintf("%s", (p+i)->fio.sn);
gotoxy(x+f+1,y+i);
cprintf("%s", (p+i)->fio.fir);
gotoxy(x+f*2+1,y+i);
cprintf("%s", (p+i)->fio.pn);
}
}
Объяснение кода листинга программы
- Включаются заголовочные файлы
stdio.hиconio.h. - Определяются константы:
- sz (4);
- szsn (200);
- szfn (100);
- szpn (100);
- f (15).
- Определяется структура
fullnс полями:- char sn[szsn];
- char fir[szfn];
- char pn[szpn].
- Определяется структура
dateс полями:- int num;
- int mon;
- int year.
- Определяется структура
studс полями:- struct fulln fio;
- struct date ent;
- struct date exc.
- Определяется функция printstr.
- В функции main() создается массив структур
studlist размером sz (в данном случае 4). - Инициализируются первые три элемента массива.
- Создается указатель C на первый элемент массива list.
- Вызывается функция printstr(), передавая в нее указатель C, размер массива (3), координаты вывода (2,17) и значения переменных n, x, y, которые используются в функции printstr().
- В функции printstr() используется цикл for для перебора элементов массива p, начиная с индекса 0 и до n-1.
- Внутри цикла выводятся значения полей структур
fullnна экран с помощью функции cprintf(). - Координаты вывода задаются с помощью функции gotoxy().
- Значения переменных x, y используются для задания координат вывода.
- Значение переменной f используется для задания смещения между полями структур
fulln. - Значение переменной i используется для задания номера текущего элемента массива.
- В конце функции main() вызывается функция getch().